home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-05-31 | 471.6 KB | 10,785 lines |
- ; 0001 0 %TITLE 'KERMSG - Kermit message processing'
- ; 0002 0 MODULE KERMSG (IDENT = '3.3.111'
- ; L 0003 0 %IF %BLISS(BLISS32)
- ; 0004 0 %THEN
- ; 0005 0 ,ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)
- ; 0006 0 %FI
- ; 0007 0 ) =
- ; 0008 1 BEGIN
- ; 0009 1
- ; 0010 1 SWITCHES LANGUAGE (COMMON);
- ; 0011 1
- ; 0012 1 !<BLF/WIDTH:100>
- ; 0013 1
- ; 0014 1 !++
- ; 0015 1 ! FACILITY:
- ; 0016 1 ! Kermit-10, VMS Kermit, Pro/Kermit
- ; 0017 1 !
- ; 0018 1 ! ABSTRACT:
- ; 0019 1 ! KERMSG is the message processing routines for Kermit-10, VMS Kermit,
- ; 0020 1 ! and PRO/Kermit.
- ; 0021 1 ! This module is written in common BLISS, so that it can be
- ; 0022 1 ! transported for the DECsystem-10 and VAX/VMS systems.
- ; 0023 1 !
- ; 0024 1 ! ENVIRONMENT:
- ; 0025 1 ! User mode
- ; 0026 1 !
- ; 0027 1 ! AUTHOR: Robert C. McQueen, CREATION DATE: 24-January-1983
- ; 0028 1 !
- ; 0029 1 ! MODIFIED BY:
- ; 0030 1 !
- ; 0031 1 !--
- ; 0032 1
- ; 0033 1 %SBTTL 'Table of Contents'
- ; 0034 1 !+
- ; 0035 1 !.pag.lit
- ; 0036 1 ! Table of Contents for KERMSG
- ; 0037 1 !
- ; 0038 1 !
- ; 0039 1 ! Section Page
- ; 0040 1 ! 1. Revision History . . . . . . . . . . . . . . . . . . . 3
- ; 0041 1 ! 2. Interface requirements . . . . . . . . . . . . . . . . 4
- ; 0042 1 ! 3. Declarations
- ; 0043 1 ! 3.1. Forward definitions . . . . . . . . . . . . . 5
- ; 0044 1 ! 4. Require files. . . . . . . . . . . . . . . . . . . . . 28
- ; 0045 1 ! 5. Macro definitions. . . . . . . . . . . . . . . . . . . 29
- ; 0046 1 ! 6. KERMIT Protocol Definitions. . . . . . . . . . . . . . 30
- ; 0047 1 ! 6.1. Packet offsets. . . . . . . . . . . . . . . . 31
- ; 0048 1 ! 6.2. Message dependent field . . . . . . . . . . . 32
- ; 0049 1 ! 6.3. SEND initiate packet. . . . . . . . . . . . . 33
- ; 0050 1 ! 7. KERMIT Protocol States . . . . . . . . . . . . . . . . 34
- ; 0051 1 ! 8. Internal constants . . . . . . . . . . . . . . . . . . 35
- ; 0052 1 ! 9. Storage - External . . . . . . . . . . . . . . . . . . 36
- ; 0053 1 ! 10. Storage - Local. . . . . . . . . . . . . . . . . . . . 37
- ; 0054 1 ! 11. External references. . . . . . . . . . . . . . . . . . 38
- ; 0055 1 ! 12. MSG_INIT . . . . . . . . . . . . . . . . . . . . . . . 39
- ; 0056 1 ! 13. SND_ERROR. . . . . . . . . . . . . . . . . . . . . . . 40
- ; 0057 1 ! 14. SERVER - Server mode . . . . . . . . . . . . . . . . . 41
- ; 0058 1 ! 15. SEND_SWITCH. . . . . . . . . . . . . . . . . . . . . . 42
- ; 0059 1 ! 16. REC_SWITCH . . . . . . . . . . . . . . . . . . . . . . 43
- ; 0060 1 ! 17. Server
- ; 0061 1 ! 17.1. DO_GENERIC - Execute a generic command. . . . 44
- ; 0062 1 ! 18. DO_TRANSACTION - Main loop for FSM . . . . . . . . . . 45
- ; 0063 1 ! 19. REC_SERVER_IDLE - Idle server state. . . . . . . . . . 46
- ; 0064 1 ! 20. SEND_SERVER_INIT . . . . . . . . . . . . . . . . . . . 47
- ; 0065 1 ! 21. SEND_DATA. . . . . . . . . . . . . . . . . . . . . . . 48
- ; 0066 1 ! 22. SEND_FILE. . . . . . . . . . . . . . . . . . . . . . . 49
- ; 0067 1 ! 23. SEND_EOF . . . . . . . . . . . . . . . . . . . . . . . 50
- ; 0068 1 ! 24. SEND_INIT. . . . . . . . . . . . . . . . . . . . . . . 51
- ; 0069 1 ! 25. SEND_OPEN_FILE - Open file for sending . . . . . . . . 52
- ; 0070 1 ! 26. SEND_GENCMD. . . . . . . . . . . . . . . . . . . . . . 53
- ; 0071 1 ! 27. SEND_BREAK . . . . . . . . . . . . . . . . . . . . . . 54
- ; 0072 1 ! 28. REC_INIT . . . . . . . . . . . . . . . . . . . . . . . 55
- ; 0073 1 ! 29. REC_FILE . . . . . . . . . . . . . . . . . . . . . . . 56
- ; 0074 1 ! 30. REC_DATA . . . . . . . . . . . . . . . . . . . . . . . 57
- ; 0075 1 ! 31. SERVER - Generic commands. . . . . . . . . . . . . . . 58
- ; 0076 1 ! 32. HOST_COMMAND - perform a host command. . . . . . . . . 59
- ; 0077 1 ! 33. CALL_SY_RTN - handle operating system dependent functions 60
- ; 0078 1 ! 34. Message processing
- ; 0079 1 ! 34.1. PRS_SEND_INIT - Parse send init params. . . . 61
- ; 0080 1 ! 35. SET_SEND_INIT. . . . . . . . . . . . . . . . . . . . . 62
- ; 0081 1 ! 36. SEND_PACKET. . . . . . . . . . . . . . . . . . . . . . 63
- ; 0082 1 ! 37. REC_MESSAGE - Receive a message. . . . . . . . . . . . 64
- ; 0083 1 ! 38. REC_PACKET . . . . . . . . . . . . . . . . . . . . . . 65
- ; 0084 1 ! 39. CALC_BLOCK_CHECK . . . . . . . . . . . . . . . . . . . 66
- ; 0085 1 ! 40. NORMALIZE_FILE - Put file name into normal form. . . . 67
- ; 0086 1 ! 41. Buffer filling
- ; 0087 1 ! 41.1. Main routine. . . . . . . . . . . . . . . . . 68
- ; 0088 1 ! 42. BFR_EMPTY. . . . . . . . . . . . . . . . . . . . . . . 69
- ; 0089 1 ! 43. Buffer filling and emptying subroutines. . . . . . . . 70
- ; 0090 1 ! 44. Add parity routine . . . . . . . . . . . . . . . . . . 71
- ; 0091 1 ! 45. Parity routine . . . . . . . . . . . . . . . . . . . . 72
- ; 0092 1 ! 46. Per transfer
- ; 0093 1 ! 46.1. Initialization. . . . . . . . . . . . . . . . 73
- ; 0094 1 ! 47. Statistics
- ; 0095 1 ! 47.1. Finish message transfer . . . . . . . . . . . 74
- ; 0096 1 ! 48. Status type out
- ; 0097 1 ! 48.1. STS_OUTPUT. . . . . . . . . . . . . . . . . . 75
- ; 0098 1 ! 49. TYPE_CHAR - Type out a character . . . . . . . . . . . 76
- ; 0099 1 ! 50. Debugging
- ; 0100 1 ! 50.1. DBG_SEND. . . . . . . . . . . . . . . . . . . 77
- ; 0101 1 ! 50.2. DBG_RECEIVE . . . . . . . . . . . . . . . . . 78
- ; 0102 1 ! 50.3. DBG_MESSAGE . . . . . . . . . . . . . . . . . 79
- ; 0103 1 ! 51. End of KERMSG. . . . . . . . . . . . . . . . . . . . . 80
- ; 0104 1 !.end lit.pag
- ; 0105 1 !-
- ; 0106 1 %SBTTL 'Revision History'
- ; 0107 1
- ; 0108 1 !++
- ; 0109 1 ! Start of version 1.
- ; 0110 1 !
- ; 0111 1 ! 1.0.000 By: Robert C. McQueen On: 4-Jan-1983
- ; 0112 1 ! Create this program.
- ; 0113 1 !
- ; 0114 1 ! 1.0.001 By: Robert C. McQueen On: 30-Apr-1983
- ; 0115 1 ! Change PAR_xxx to be PR_xxx, so that they can be used for
- ; 0116 1 ! KERMIT-10.
- ; 0117 1 !
- ; 0118 1 ! 1.0.002 By: Robert C. McQueen On: 1-May-1983
- ; 0119 1 ! Add DO_GENERIC routine to cause a generic Kermit command to
- ; 0120 1 ! be executed on the remote Kermit.
- ; 0121 1 !
- ; 0122 1 ! 1.0.003 By: Robert C. McQueen On: 3-May-1983
- ; 0123 1 ! Fix message number incrementing.
- ; 0124 1 !
- ; 0125 1 ! 1.0.004 By: Robert C. McQueen On: 4-May-1983
- ; 0126 1 ! Allow RECEIVE file-specification to work correctly.
- ; 0127 1 !
- ; 0128 1 ! 1.0.005 By: Robert C. McQueen On: 6-May-1983
- ; 0129 1 ! Add more stats support.
- ; 0130 1 !
- ; 0131 1 ! 1.0.006 By: Nick Bush On: 13-June-1983
- ; 0132 1 ! Fix SEND_PACKET to copy correct characters when fixing
- ; 0133 1 ! parity bits.
- ; 0134 1 !
- ; 0135 1 ! 1.1.007 By: Nick Bush On: 15-July-1983
- ; 0136 1 ! Correct SEND-INIT message handling to do the right things
- ; 0137 1 ! with the protocol version 3 items.
- ; 0138 1 !
- ; 0139 1 ! 1.1.010 By: Robert C. McQueen On: 20-July-1983
- ; 0140 1 ! Make PARITY a global routine, so that it can be called by
- ; 0141 1 ! CONNECT processing. Change the name from PARITY to GEN_PARITY
- ; 0142 1 ! add a new routine to generate the parity, since it is not
- ; 0143 1 ! part of the checksum.
- ; 0144 1 !
- ; 0145 1 ! 1.1.011 By: Robert C. McQueen On: 28-July-1983
- ; 0146 1 ! KER_TIMEOUT errors in the SERVER loop would cause
- ; 0147 1 ! KER_UNISRV error messages to be returned to the remote.
- ; 0148 1 ! Check for receive failures and send NAKs instead.
- ; 0149 1 !
- ; 0150 1 ! 1.2.012 By: Robert C. McQueen On: 23-August-1983
- ; 0151 1 ! Don't abort if we get a message that is just an end of line
- ; 0152 1 ! character. It could be noise on the line.
- ; 0153 1 !
- ; 0154 1 ! 1.2.013 By: Nick Bush On: 7-September-1983
- ; 0155 1 ! Fix several problems with the SEND_xxx parameters
- ; 0156 1 !
- ; 0157 1 ! 1.2.014 By: Robert C. McQueen On: 15-September-1983
- ; 0158 1 ! Add routine calls to XFR_STATUS to tell the user on the
- ; 0159 1 ! number of packets have changed.
- ; 0160 1 !
- ; 0161 1 ! 1.2.015 By: Nick Bush On: 5-October-1983
- ; 0162 1 ! Add 2 and 3 character checksum (block check) support.
- ; 0163 1 ! Add support for data within acknowledgement packets
- ; 0164 1 ! and withing end-of-file packets to allow for file
- ; 0165 1 ! transmission to be aborted. Also add support for
- ; 0166 1 ! "I" packet to allow server parameters to be initialized.
- ; 0167 1 !
- ; 0168 1 ! 1.2.016 By: Nick Bush On: 19-October-1983
- ; 0169 1 ! Add repeat character support.
- ; 0170 1 !
- ; 0171 1 ! 2.0.017 Release TOPS-10 Kermit-10 version 2.0
- ; 0172 1 ! Release VAX/VMS Kermit-32 version 2.0
- ; 0173 1 !
- ; 0174 1 ! 2.0.018 By: Robert C. McQueen On: 16-November-1983
- ; 0175 1 ! Fix four checks on the message number that were not
- ; 0176 1 ! mod 64.
- ; 0177 1 !
- ; 0178 1 ! 2.0.019 By: Robert C. McQueen On: 16-November-1983
- ; 0179 1 ! Remove the CLEAR routine. It is not really needed.
- ; 0180 1 !
- ; 0181 1 ! 2.0.020 By: Nick Bush On: 12-Dec-1983
- ; 0182 1 ! Fix SEND_DATA and BFR_FILL to handle empty files and
- ; 0183 1 ! files which happen to end just on a message boundary.
- ; 0184 1 ! This would sometimes produce extra nulls.
- ; 0185 1 !
- ; 0186 1 ! 2.0.021 By: Nick Bush On: 15-Dec-1983
- ; 0187 1 ! Fix some problems with REC_MESSAGE which would cause
- ; 0188 1 ! aborts when a message timed out.
- ; 0189 1 !
- ; 0190 1 ! 2.0.022 By: Robert C. McQueen 19-Dec-1983
- ; 0191 1 ! Make STATUS a local for most routines and remove FILE_DUMP
- ; 0192 1 ! as it is nolonger needed.
- ; 0193 1 !
- ; 0194 1 ! 2.0.023 By: Nick Bush On: 3-Jan-1984
- ; 0195 1 ! Change FIL_NORMAL_FORM to contain not just a flag, but
- ; 0196 1 ! a file name type instead.
- ; 0197 1 !
- ; 0198 1 ! 2.0.024 By: Nick Bush On: 11-Jan-1984
- ; 0199 1 ! Fix REC_MESSAGE to send NAK for packet we expect, not
- ; 0200 1 ! previous packet.
- ; 0201 1 !
- ; 0202 1 ! 2.0.025 By: Nick Bush On: 23-Jan-1984
- ; 0203 1 ! Re-enable server-init packet and complete code so that
- ; 0204 1 ! parameters set by it will remain set.
- ; 0205 1 ! Fix file name copying to use BFR_FILL or BFR_EMPTY
- ; 0206 1 ! so that all quoting/compression is done properly.
- ; 0207 1 !
- ; 0208 1 ! 2.0.026 By: Nick Bush On: 15-Feb-1984
- ; 0209 1 ! Add code for generic command support (both directions).
- ; 0210 1 ! There is now only one state dispatch loop, entered
- ; 0211 1 ! in various states for different functions.
- ; 0212 1 !
- ; 0213 1 ! 2.0.027 By: Robert C. McQueen On: 16-Feb-1984
- ; 0214 1 ! At some point SEND_TIMEOUT became global, but it was not moved
- ; 0215 1 ! to KERGLB. This edit moves it to KERGLB.BLI.
- ; 0216 1 !
- ; 0217 1 ! 2.0.030 By: Nick Bush On: 2-March-1984
- ; 0218 1 ! Fix BFR_FILL to handle case of last repeated character
- ; 0219 1 ! not fitting within a packet. It was forgetting to
- ; 0220 1 ! send the characters at all.
- ; 0221 1 !
- ; 0222 1 ! 2.0.031 By: Nick Bush On: 6-March-1984
- ; 0223 1 ! Make sure FILE_OPEN_FLAG is set properly when advancing
- ; 0224 1 ! to next file of a wild-card send. The file was not
- ; 0225 1 ! being set true, leading to problems after a couple files.
- ; 0226 1 !
- ; 0227 1 ! 2.0.032 By: Nick Bush On: 9-March-1984
- ; 0228 1 ! Fix UNPACK_DATA in SERVER_GENERIC to properly store
- ; 0229 1 ! new string pointer.
- ; 0230 1 !
- ; 0231 1 ! 2.0.033 By: Robert C. McQueen On: 12-March-1984
- ; 0232 1 ! If NEXT_FILE fails with anything other than a NOMORFILES
- ; 0233 1 ! it should change state to STATE_A not STATE_SB. This
- ; 0234 1 ! fixes a problem caused by Pro/Kermit and KERFIL (VMS).
- ; 0235 1 !
- ; 0236 1 ! 2.0.034 By: Nick Bush On: 15-March-1984
- ; 0237 1 ! Put file spec into X packet as well as F packet. This
- ; 0238 1 ! makes wild card TYPE's work nicer.
- ; 0239 1 !
- ; 0240 1 ! 2.0.035 By: Nick Bush On: 20-March-1984
- ; 0241 1 ! Fix send/receive quoting to conform to the way the
- ; 0242 1 ! protocol manual says it should be done, rather
- ; 0243 1 ! than the way we (and Kermit-20) have always done it.
- ; 0244 1 !
- ; 0245 1 ! 2.0.036 By: Nick Bush On: 28-March-1984
- ; 0246 1 ! Make SERVER_GENERIC more defensive against badly
- ; 0247 1 ! constructed packets. If an argument has negative
- ; 0248 1 ! length, punt the request. Also put angle brackets
- ; 0249 1 ! around data from "X" packet header, so file names will
- ; 0250 1 ! stick out.
- ; 0251 1 !
- ; 0252 1 ! 3.0.037 Start of version 3.
- ; 0253 1 !
- ; 0254 1 ! 3.0.040 By: Nick Bush On: 2-April-1984
- ; 0255 1 ! Add separate server timeout. This allows stopping the
- ; 0256 1 ! server NAK's without affecting the normal packet timeout.
- ; 0257 1 !
- ; 0258 1 ! 3.0.041 By: Nick Bush On: 12-April-1984
- ; 0259 1 ! Fix block check calculation to account for the fact
- ; 0260 1 ! that the parity bits are put onto the message when
- ; 0261 1 ! it is sent (in place), so that if a retransmission is
- ; 0262 1 ! done without refilling the buffer (as is normal with
- ; 0263 1 ! data messages), the parity bits will be there. Make
- ; 0264 1 ! sure we strip them out for block check calculation.
- ; 0265 1 !
- ; 0266 1 ! 3.1.042 By: Nick Bush On: 27-August-1984
- ; 0267 1 ! If we get too many retries when sending a server init (I)
- ; 0268 1 ! packet, don't abort. Instead, just try sending the server
- ; 0269 1 ! command, since the Kermit on the other end might be coded
- ; 0270 1 ! wrong and is responding to packets it doesn't understand
- ; 0271 1 ! with a NAK.
- ; 0272 1 !
- ; 0273 1 ! 3.1.043 By: Nick Bush On: 27-August-1984
- ; 0274 1 ! Don't abort receives on zero length messages. Just treat
- ; 0275 1 ! it like a timeout.
- ; 0276 1 !
- ; 0277 1 ! 3.1.044 By: Nick Bush On: 10-April-1985
- ; 0278 1 ! Remove IBM mode. It will be instituted by IBM_CHAR being
- ; 0279 1 ! set >= 0 if handshaking is needed.
- ; 0280 1 !
- ; 0281 1 ! 3.1.045 BY: David Stevens On: 15-July-1985
- ; 0282 1 ! Fix terminal message for multiple file sendings. Type out
- ; 0283 1 ! "Sending: " in the system dependent NEXT_FILE routine.
- ; 0284 1 !
- ; 0285 1 ! Start of version 3.2
- ; 0286 1 !
- ; 0287 1 ! 3.2.070 By: Robert McQueen On: 17-Dec-1985
- ; 0288 1 ! Fix CRC calculations when sending 8 bit data and not
- ; 0289 1 ! using 8 bit quoting.
- ; 0290 1 !
- ; 0291 1 ! 3.2.071 By: Robert McQueen On: 11-March-186
- ; 0292 1 ! Include space in the message buffer for the line termination
- ; 0293 1 ! character.
- ; 0294 1 !
- ; 0295 1 ! 3.3.100 By: Gregory P. Welsh On: 1-June-1986
- ; 0296 1 ! Made FILE_OPEN_FLAG GLOBAL so it could be updated properly for
- ; 0297 1 ! Transmit function from module KERTRM. Also renamed it to
- ; 0298 1 ! FFILE_OPEN_FLAG so it could be distinguished externally from
- ; 0299 1 ! routine FILE_OPEN.
- ; 0300 1 !
- ; 0301 1 ! 3.3.104 By: Robert McQueen On: 5-July-1986
- ; 0302 1 ! Add changes/fixes suggested by Art Guion and David Deley for
- ; 0303 1 ! KERMSG.BLI.
- ; 0304 1 ! - Always attempt a handshake in IBM mode. Failing to handshake
- ; 0305 1 ! may cause 3704/5 style controller to hang a VM system.
- ; 0306 1 ! - Don't lose the last character in a buffer. BFR_FILL logic
- ; 0307 1 ! forgets to send the last cahracters of a file when it doesn't
- ; 0308 1 ! fit into the current packet.
- ; 0309 1 !
- ; 0310 1 ! 3.3.107 By: Antonino N. Mione On: 8-Sep-1986
- ; 0311 1 ! Do not abort on ERROR packet while in SERVER mode. Instead,
- ; 0312 1 ! return to SERVER IDLE mode.
- ; 0313 1 !
- ; 0314 1 ! 3.3.108 By: Burt Johnson On: 1-Feb-1990
- ; 0315 1 ! Added Dan Norstedt's TOP10 support for Extended Length packets;
- ; 0316 1 ! Header parity is computed, but not used.
- ; 0317 1 ! Undone 3.3.107, to allow for Ctrl-Cs to work properly
- ; 0318 1 ! Added PSECT PLIT = $CODE$ to accommodate TT_TEXT address
- ; 0319 1 ! references within 32k word_relative address boundry.
- ; 0320 1 !
- ; 0321 1 ! 3.3.109 JHW007 Jonathan H. Welch, 4-Apr-1990 17:05
- ; 0322 1 ! Backed out 3.3.108 PSECT PLIT = $CODE$ and replaced it
- ; 0323 1 ! with a compile-time test for BLISS32 systems so that
- ; 0324 1 ! references to data use longword offsets.
- ; 0325 1 !
- ; 0326 1 ! 3.3.110 JHW008 Jonathan H. Welch, 5-Apr-1990 10:57
- ; 0327 1 ! Modified the call to NORMALIZE_FILE in routine REC_FILE
- ; 0328 1 ! to adjust file name and type lengths downwards to 39
- ; 0329 1 ! characters each as opposed to the pre-VMS 4 format of
- ; 0330 1 ! 9 for the name and 3 for the type.
- ; 0331 1 !
- ; 0332 1 ! 3.3.111 JHW011 Jonathan H. Welch, 17-May-1990 9:06
- ; 0333 1 ! Modified a miscoded call to send_packet in routine
- ; 0334 1 ! send_gencmd to correctly specify the length of the
- ; 0335 1 ! response packet to transmit. This miscoding only
- ; 0336 1 ! affected long packet support, in particular, when
- ; 0337 1 ! GETting files standard length packets were being used
- ; 0338 1 ! when long packet support was available in both kermit
- ; 0339 1 ! programs.
- ; 0340 1 !--
- ; 0341 1
- ; 0342 1 %SBTTL 'Interface requirements'
- ; 0343 1
- ; 0344 1 !++
- ; 0345 1 ! Interface requirements
- ; 0346 1 !
- ; 0347 1 ! The following routines and data locations are rquired for a correct
- ; 0348 1 ! implementation of KERMIT.
- ; 0349 1 !
- ; 0350 1 ! File routines:
- ; 0351 1 !
- ; 0352 1 ! FILE_OPEN (Function)
- ; 0353 1 ! This routine will open a file for reading or writting. It
- ; 0354 1 ! will assume that FILE_SIZE contains the number of bytes
- ; 0355 1 ! and FILE_NAME contains the file name of length FILE_SIZE.
- ; 0356 1 ! The function that is passed is either FNC_READ or FNC_WRITE.
- ; 0357 1 !
- ; 0358 1 ! FILE_CLOSE ()
- ; 0359 1 ! This routine will close the currently open file. This
- ; 0360 1 ! routine will return the status of the operation.
- ; 0361 1 !
- ; 0362 1 ! GET_FILE (Character)
- ; 0363 1 ! This routine will get a character from the currently open file
- ; 0364 1 ! and store it in the location specified by "Character". There
- ; 0365 1 ! will be a true/false value returned by the routine to determine
- ; 0366 1 ! if there was an error.
- ; 0367 1 !
- ; 0368 1 ! PUT_FILE (Character)
- ; 0369 1 ! This routine will output a character to the currently open
- ; 0370 1 ! file. It will return a true/false value to determine if the
- ; 0371 1 ! routine was successful.
- ; 0372 1 !
- ; 0373 1 ! NEXT_FILE ()
- ; 0374 1 ! This routine will advance to the next file. This routine
- ; 0375 1 ! will return false if there are no more files to process.
- ; 0376 1 !
- ; 0377 1 ! Communications line routines:
- ; 0378 1 !
- ; 0379 1 ! RECEIVE (Buffer address, Address of var to store length into)
- ; 0380 1 ! This routine will receive a message from the remote Kermit.
- ; 0381 1 !
- ; 0382 1 ! SEND (Buffer address, Length in characters)
- ; 0383 1 ! This routine will send a message to the remote Kermit.
- ; 0384 1 !
- ; 0385 1 ! GEN_CRC (Buffer address, length in characters)
- ; 0386 1 ! This routine will calculate the CRC-CCITT for the characters
- ; 0387 1 ! in the buffer.
- ; 0388 1 !
- ; 0389 1 ! Operating system routines:
- ; 0390 1 !
- ; 0391 1 ! SY_DISMISS (Seconds)
- ; 0392 1 ! This routine will cause Kermit to sleep for the specified
- ; 0393 1 ! number of seconds. It is used to handle the DELAY parameter.
- ; 0394 1 !
- ; 0395 1 ! SY_LOGOUT ()
- ; 0396 1 ! Log the job off of the system. (Kill the process).
- ; 0397 1 !
- ; 0398 1 ! SY_TIME ()
- ; 0399 1 ! This routine will return the starting time milliseconds.
- ; 0400 1 ! It can be the start of Kermit, the system, etc, so long
- ; 0401 1 ! as it always is incrementing.
- ; 0402 1 !
- ; 0403 1 ! Status routines:
- ; 0404 1 !
- ; 0405 1 ! XFR_STATUS (Type, Subtype);
- ; 0406 1 ! This routine is called to indicate the occurance of
- ; 0407 1 ! a significant event that the user interface may wish
- ; 0408 1 ! to inform the user about. The arguments indicate the
- ; 0409 1 ! type of event.
- ; 0410 1 ! Type: "S" - Send, "R" - Receive
- ; 0411 1 ! Subtype: "P" - Packet
- ; 0412 1 ! "N" - NAK
- ; 0413 1 ! "T" - timeout
- ; 0414 1 ! For type = "I" (initiate), "T" (terminate):
- ; 0415 1 ! Subtype: "S" - a file send
- ; 0416 1 ! "R" - a file receive
- ; 0417 1 ! "G" - a generic command
- ; 0418 1 ! "I" - for "T" only, returning to server idle
- ; 0419 1 ! For type = "F" (file operation):
- ; 0420 1 ! Subtype: "S" - open for sending
- ; 0421 1 ! "R" - open for receiving
- ; 0422 1 ! "C" - closing file OK
- ; 0423 1 ! "X" - aborting file by user request
- ; 0424 1 ! "Z" - aborting group by user request
- ; 0425 1 ! "D" - aborting file, but saving due to disposition
- ; 0426 1 ! "A" - aborting file due to protocol error
- ; 0427 1 !
- ; 0428 1 ! Error processing:
- ; 0429 1 !
- ; 0430 1 ! KRM_ERROR (Error parameter)
- ; 0431 1 ! This routine will cause an error message to be issued.
- ; 0432 1 ! The error parameter is defined by KERERR. This may cause
- ; 0433 1 ! SND_ERROR to be called to send an "E" message to the remote.
- ; 0434 1 !
- ; 0435 1 ! Terminal I/O routines:
- ; 0436 1 !
- ; 0437 1 ! TERM_DUMP (Buffer, Count)
- ; 0438 1 ! DBG_DUMP (Buffer, Count)
- ; 0439 1 ! This routine will dump the buffer onto the user's terminal.
- ; 0440 1 ! The routine is supplied with the count of the characters
- ; 0441 1 ! and the address of the buffer.
- ; 0442 1 ! These may be the same routine or different. DBG_DUMP
- ; 0443 1 ! is only called for debugging output.
- ; 0444 1 !
- ; 0445 1 !
- ; 0446 1 ! ENTRY POINTS
- ; 0447 1 !
- ; 0448 1 ! KERMSG contains the following entry points for the KERMIT.
- ; 0449 1 !
- ; 0450 1 ! SERVER ()
- ; 0451 1 ! This routine will cause KERMIT go enter server mode.
- ; 0452 1 !
- ; 0453 1 ! SEND_SWITCH ()
- ; 0454 1 ! This routine will send a file. It expects that the user
- ; 0455 1 ! has stored the text of the file name into FILE_NAME and
- ; 0456 1 ! the length of the text into FILE_SIZE.
- ; 0457 1 !
- ; 0458 1 ! REC_SWITCH ()
- ; 0459 1 ! This routine will receive a file. It expects that the default
- ; 0460 1 ! file name is set up in FILE_NAME and the length is in
- ; 0461 1 ! FILE_SIZE.
- ; 0462 1 !
- ; 0463 1 ! GEN_PARITY (Character)
- ; 0464 1 ! This routine will return the character with the proper parity
- ; 0465 1 ! on the character.
- ; 0466 1 !
- ; 0467 1 ! SND_ERROR (COUNT, ADDRESS)
- ; 0468 1 ! This routine will send the text of an error to the remote
- ; 0469 1 ! Kermit.
- ; 0470 1 !
- ; 0471 1 ! DO_GENERIC (TYPE)
- ; 0472 1 ! This routine will cause a generic function to be sent to
- ; 0473 1 ! the remote Kermit. This routine will then do all of the
- ; 0474 1 ! necessary hand shaking to handle the local end of the generic
- ; 0475 1 ! Kermit command.
- ; 0476 1 !
- ; 0477 1 !
- ; 0478 1 ! GLOBAL Storage
- ; 0479 1 !
- ; 0480 1 ! The following are the global storage locations that are used to interface
- ; 0481 1 ! to KERMSG. These locations contains the various send and receive parameters.
- ; 0482 1 !
- ; 0483 1 ! Receive parameters:
- ; 0484 1 !
- ; 0485 1 ! RCV_PKT_SIZE
- ; 0486 1 ! Receive packet size.
- ; 0487 1 ! RCV_NPAD
- ; 0488 1 ! Padding length
- ; 0489 1 ! RCV_PADCHAR
- ; 0490 1 ! Padding character
- ; 0491 1 ! RCV_TIMEOUT
- ; 0492 1 ! Time out
- ; 0493 1 ! RCV_EOL
- ; 0494 1 ! End of line character
- ; 0495 1 ! RCV_QUOTE_CHR
- ; 0496 1 ! Quote character
- ; 0497 1 ! RCV_8QUOTE_CHR
- ; 0498 1 ! 8-bit quoting character
- ; 0499 1 ! RCV_SOH
- ; 0500 1 ! Start of header character
- ; 0501 1 !
- ; 0502 1 ! Send parameters (Negative values denote the default, positive user supplied):
- ; 0503 1 !
- ; 0504 1 ! SND_PKT_SIZE
- ; 0505 1 ! Send packet size
- ; 0506 1 ! SND_NPAD
- ; 0507 1 ! Padding length
- ; 0508 1 ! SND_PADCHAR
- ; 0509 1 ! Padding character
- ; 0510 1 ! SND_TIMEOUT
- ; 0511 1 ! Time out
- ; 0512 1 ! SND_EOL
- ; 0513 1 ! End of line character
- ; 0514 1 ! SND_QUOTE_CHR
- ; 0515 1 ! Quote character
- ; 0516 1 ! SND_SOH
- ; 0517 1 ! Start of header character (normally 001)
- ; 0518 1 !
- ; 0519 1 ! Statistics:
- ; 0520 1 !
- ; 0521 1 ! SND_TOTAL_CHARS
- ; 0522 1 ! Total characters sent for this Kermit session
- ; 0523 1 ! RCV_TOTAL_CHARS
- ; 0524 1 ! Total characters received for this Kermit session
- ; 0525 1 ! SND_DATA_CHARS
- ; 0526 1 ! Total number of data characters sent for this Kermit session
- ; 0527 1 ! RCV_DATA_CHARS
- ; 0528 1 ! Total number of data characters received for this Kermit session
- ; 0529 1 ! SND_COUNT
- ; 0530 1 ! Total number of packets that have been sent
- ; 0531 1 ! RCV_COUNT
- ; 0532 1 ! Total number of packets that have been received.
- ; 0533 1 ! SMSG_TOTAL_CHARS
- ; 0534 1 ! Total characters sent for this file transfer
- ; 0535 1 ! RMSG_TOTAL_CHARS
- ; 0536 1 ! Total characters received for this file transfer
- ; 0537 1 ! SMSG_DATA_CHARS
- ; 0538 1 ! Total data characters sent for this file transfer
- ; 0539 1 ! RMSG_DATA_CHARS
- ; 0540 1 ! Total data characters received for this file transfer
- ; 0541 1 ! SMSG_NAKS
- ; 0542 1 ! Total number of NAKs sent for this file transfer
- ; 0543 1 ! RMSG_NAKS
- ; 0544 1 ! Total number of NAKs received for this file transfer
- ; 0545 1 ! XFR_TIME
- ; 0546 1 ! Amount of time the last transfer took in milliseconds.
- ; 0547 1 ! TOTAL_TIME
- ; 0548 1 ! Total amount of time spend transfering data.
- ; 0549 1 !
- ; 0550 1 ! Misc constants:
- ; 0551 1 !
- ; 0552 1 ! LAST_ERROR
- ; 0553 1 ! ASCIZ of the last error message issued.
- ; 0554 1 ! FILE_NAME
- ; 0555 1 ! Vector containing the ASCII characters of the file name.
- ; 0556 1 ! FILE_SIZE
- ; 0557 1 ! Number of characters in the FILE_NAME vector.
- ; 0558 1 ! DELAY
- ; 0559 1 ! Amount of time to delay
- ; 0560 1 ! DUPLEX
- ; 0561 1 ! DP_HALF or DP_FULL to denote either half duplex or full duplex.
- ; 0562 1 ! [Currently only DP_FULL is supported]
- ; 0563 1 ! PKT_RETRIES
- ; 0564 1 ! Number of retries to attempt to read a message.
- ; 0565 1 ! SI_RETRIES
- ; 0566 1 ! Number of retries to attempt on send inits
- ; 0567 1 ! DEBUG_FLAG
- ; 0568 1 ! Debugging mode on/off
- ; 0569 1 ! WARN_FLAG
- ; 0570 1 ! File warning flag
- ; 0571 1 ! IBM_FLAG
- ; 0572 1 ! True if talking to an IBM system, else false.
- ; 0573 1 ! ECHO_FLAG
- ; 0574 1 ! Local echo flag
- ; 0575 1 ! CONNECT_FLAG
- ; 0576 1 ! Connected flag; True if terminal and SET LINE are the same
- ; 0577 1 ! PARITY_TYPE
- ; 0578 1 ! Type of parity to use on sends.
- ; 0579 1 ! DEV_PARITY_FLAG
- ; 0580 1 ! Device will add parity to message. True if device adds
- ; 0581 1 ! parity and false if we must do it.
- ; 0582 1 ! FLAG_FILE_OPEN
- ; 0583 1 ! File is opened.
- ; 0584 1 !
- ; 0585 1 !--
- ; 0586 1
- ; 0587 1 %SBTTL 'Declarations -- Forward definitions'
- ; 0588 1 !<BLF/NOFORMAT>
- ; 0589 1 !
- ; 0590 1 ! Forward definitions
- ; 0591 1 !
- ; 0592 1
- ; 0593 1 FORWARD ROUTINE
- ; 0594 1
- ; 0595 1 ! Main loop for a complete transaction
- ; 0596 1 DO_TRANSACTION, ! Perform a complete transaction
- ; 0597 1
- ; 0598 1 ! Send processing routines
- ; 0599 1
- ; 0600 1 SEND_SERVER_INIT, ![026] Send a server init packet
- ; 0601 1 SEND_DATA, ! Send data to the micro
- ; 0602 1 SEND_FILE, ! Send file name
- ; 0603 1 SEND_OPEN_FILE, ! Open file for sending
- ; 0604 1 SEND_GENCMD, ! Send generic command
- ; 0605 1 SEND_EOF, ! Send EOF
- ; 0606 1 SEND_INIT, ! Send initialization msg
- ; 0607 1 SEND_BREAK, ! Send break end of transmission
- ; 0608 1
- ; 0609 1 ! Receive processing routines
- ; 0610 1
- ; 0611 1 REC_SERVER_IDLE, ! Wait for message while server is idle
- ; 0612 1 REC_INIT, ! Receive initialization
- ; 0613 1 REC_FILE, ! Receive file information
- ; 0614 1 REC_DATA, ! Receive data
- ; 0615 1 !
- ; 0616 1 ! Server processing routines
- ; 0617 1 !
- ; 0618 1 SERVER_GENERIC, ! Process generic KERMIT commands
- ; 0619 1 HOST_COMMAND, ! Process host command
- ; 0620 1 KERMIT_COMMAND, ! Process Kermit command
- ; 0621 1 CALL_SY_RTN, ! Handle calling system routine and returning result
- ; 0622 1 !
- ; 0623 1 ! Statistic gathering routines
- ; 0624 1 !
- ; 0625 1 END_STATS : NOVALUE, ! End of a message processing stats routine
- ; 0626 1
- ; 0627 1 ! Low level send/receive routines
- ; 0628 1
- ; 0629 1 CALC_BLOCK_CHECK, ! Routine to calculate the block check value
- ; 0630 1 SET_SEND_INIT : NOVALUE, ! Set up the MSG_SND_INIT parameters.
- ; 0631 1 PRS_SEND_INIT, ! Parse MSG_SND_INIT parameters.
- ; 0632 1 DO_PARITY : NOVALUE, ! Routine to generate parity for a message
- ; 0633 1 GEN_PARITY, ! Routine to add parity to a character
- ; 0634 1 SEND_PACKET, ! Send a packet to the remote
- ; 0635 1 REC_MESSAGE, ! Receive a message with retry processing
- ; 0636 1 REC_PACKET, ! Receive a packet from the remote
- ; 0637 1
- ; 0638 1 ! Utility routines
- ; 0639 1
- ; 0640 1 NORMALIZE_FILE : NOVALUE, ! Force file name into normal form
- ; 0641 1 BFR_EMPTY, ! Empty the data buffer
- ; 0642 1 BFR_FILL, ! Fill the data buffer from a file
- ; 0643 1 SET_STRING, ![025] Routine to set alternate get/put routines
- ; 0644 1 ! for use with in memory strings
- ; 0645 1 TYPE_CHAR, ! Type a character from a packet
- ; 0646 1 INIT_XFR : NOVALUE, ! Initialize the per transfer processing
- ; 0647 1 STS_OUTPUT : NOVALUE, ! Output current transfer status
- ; 0648 1 !
- ; 0649 1 ! Debugging routines
- ; 0650 1 !
- ; 0651 1 DBG_MESSAGE : NOVALUE, ! Type out a formatted message
- ; 0652 1 DBG_SEND : NOVALUE, ! Send message debugging routine
- ; 0653 1 DBG_RECEIVE : NOVALUE; ! Receive message debugging routine
- ; 0654 1 %SBTTL 'Require files'
- ; 0655 1
- ; 0656 1 !
- ; 0657 1 !<BLF/FORMAT>
- ; 0658 1 !
- ; 0659 1 ! REQUIRE FILES:
- ; 0660 1 !
- ; 0661 1
- ; L 0662 1 %IF %BLISS (BLISS32)
- ; 0663 1 %THEN
- ; 0664 1
- ; 0665 1 LIBRARY 'SYS$LIBRARY:STARLET';
- ; 0666 1
- ; 0667 1 %FI
- ; 0668 1
- ; 0669 1 REQUIRE 'KERCOM';
- ; 0878 1
- ; 0879 1 REQUIRE 'KERERR';
- ; 0945 1
- ; 0946 1 %SBTTL 'Macro definitions'
- ; 0947 1 !
- ; 0948 1 ! MACROS:
- ; 0949 1 !
- ; 0950 1
- ; 0951 1 MACRO
- ; M 0952 1 CTL (C) =
- ; 0953 1 ((C) XOR %O'100')%,
- ; M 0954 1 CHAR (C) =
- ; 0955 1 ((C) + %O'40')%,
- ; M 0956 1 UNCHAR (C) =
- ; 0957 1 ((C) - %O'40')%;
- ; 0958 1
- ; 0959 1 %SBTTL 'KERMIT Protocol Definitions'
- ; 0960 1
- ; 0961 1 !++
- ; 0962 1 ! The following describes the various items that are found in the
- ; 0963 1 ! KERMIT messages. A complete and through desription of the protocol can be
- ; 0964 1 ! found in the KERMIT PROTOCOL MANUAL.
- ; 0965 1 !
- ; 0966 1 !
- ; 0967 1 ! All KERMIT messages have the following format:
- ; 0968 1 !
- ; 0969 1 ! <Mark><CHAR(Count)><CHAR(Seq)><Message-dependent information><Check><EOL>
- ; 0970 1 !
- ; 0971 1 ! <MARK>
- ; 0972 1 ! Normally SOH (Control-A, octal 001).
- ; 0973 1 !
- ; 0974 1 ! <CHAR(Count)>
- ; 0975 1 ! Count of the number of characters following this position.
- ; 0976 1 ! Character counts of ONLY 0 to 94 are valid.
- ; 0977 1 ! [108] Character count = 0 means extended length type packet.
- ; 0978 1 !
- ; 0979 1 ! <CHAR(Seq)>
- ; 0980 1 ! Packet sequence number, modulo 100 (octal).
- ; 0981 1 !
- ; 0982 1 ! [108] <CHAR(Type)>
- ; 0983 1 ! [108] Packet type, usually a mnemonic ASCII character.
- ; 0984 1 ! [108]
- ; 0985 1 ! [108] For Extended Length packets only:
- ; 0986 1 ! [108] <CHAR(Count/95)>
- ; 0987 1 ! [108] Count of the number of characters / 95, from (HeaderCheck)
- ; 0988 1 ! [108]
- ; 0989 1 ! [108] <CHAR(Count MOD 95)>
- ; 0990 1 ! [108] Count of the number of characters MOD 95, from (HeaderCheck)
- ; 0991 1 ! [108]
- ; 0992 1 ! [108] <CHAR(HeaderCheck)>
- ; 0993 1 ! [108] Kermit type-1 checksum of the 5 preceding ASCII characters.
- ; 0994 1 !
- ; 0995 1 ! <MESSAGE-DEPENDENT INFORMATION>
- ; 0996 1 ! This field contains the message dependent information. There can
- ; 0997 1 ! be multiple fields in this section. See the KERMIT Protocol document
- ; 0998 1 ! for a complete description of this.
- ; 0999 1 !
- ; 1000 1 ! <Check>
- ; 1001 1 ! A block check on the characters in the packet between, but not
- ; 1002 1 ! including, the mark and the checksum itself. It may be one to three
- ; 1003 1 ! characters, depending upon the type agreed upon.
- ; 1004 1 !
- ; 1005 1 ! 1. Single character arithmetic sum equal to:
- ; 1006 1 ! chksum = (s + ((s AND 300)/100)) AND 77
- ; 1007 1 ! Character sent is CHAR(chksum).
- ; 1008 1 !
- ; 1009 1 ! 2. Two character arithmetic sum. CHAR of bits 6-11 are the first
- ; 1010 1 ! character, CHAR of bits 0-5 are the second character.
- ; 1011 1 !
- ; 1012 1 ! 3. Three character CRC-CCITT. First character is CHAR of bits 12-15,
- ; 1013 1 ! second is CHAR of bits 6-11, third is CHAR of bits 0-5.
- ; 1014 1 !
- ; 1015 1 !
- ; 1016 1 ! <EOL>
- ; 1017 1 ! End of line. Any line terminator that may be required by the host.
- ; 1018 1 !--
- ; 1019 1
- ; 1020 1 %SBTTL 'KERMIT Protocol Definitions -- Packet offsets'
- ; 1021 1
- ; 1022 1 !++
- ; 1023 1 ! The following define the various offsets of the standard KERMIT
- ; 1024 1 ! packets.
- ; 1025 1 !--
- ; 1026 1
- ; 1027 1 LITERAL
- ; 1028 1 PKT_MARK = 0, ! <MARK>
- ; 1029 1 PKT_COUNT = 1, ! <CHAR(Count)>
- ; 1030 1 PKT_SEQ = 2, ! <CHAR(Seq)>
- ; 1031 1 PKT_TYPE = 3, ! <Message type>
- ; 1032 1 PKT_MSG = 4, ! <MESSAGE-DEPENDENT INFORMATION>
- ; 1033 1 PKT_COUNTX1 = 4, ! [108] ! Ext. pkt: <CHAR(MSB(Count))>
- ; 1034 1 PKT_COUNTX2 = 5, ! [108] ! Ext. pkt: <CHAR(LSB(Count))>
- ; 1035 1 PKT_HCHECK = 6, ! [108] ! Ext. pkt: Header parity
- ; 1036 1 PKT_MSGX = 7, ! [108] ! <MESSAGE-DEPENDENT INFORMATION>
- ; 1037 1 PKT_MAX_MSG = 94 - 5, ! Maximum size of the message dependent
- ; 1038 1 ! information
- ; 1039 1 PKT_CHKSUM = 0, ! <CHAR(Chksum)> offset from end of
- ; 1040 1 ! Message dependent information
- ; 1041 1 PKT_EOL = 1, ! <Eol> offset from end of data
- ; 1042 1 ! [108] PKT_OVR_HEAD_B = 2, ! Header overhead
- ; 1043 1 ! [108] PKT_OVR_HEAD_E = 1, ! Overhead at the end
- ; 1044 1 PKT_OVR_HEAD = 3, ! Overhead added to data length
- ; 1045 1 PKT_TOT_OVR_HEAD = 6; ! Total overhead of the message
- ; 1046 1
- ; 1047 1 %SBTTL 'KERMIT Protocol Definitions -- Message dependent field'
- ; 1048 1
- ; 1049 1 !++
- ; 1050 1 ! The MESSAGE-DEPENDENT information field of the message contains at
- ; 1051 1 ! least one part. That is the type of message. The remainder of the message
- ; 1052 1 ! MESSAGE-DEPENDENT field is different depending on the message.
- ; 1053 1 !
- ; 1054 1 ! <TYPE><TYPE-DEPENDENT-INFORMATION>
- ; 1055 1 !
- ; 1056 1 ! <TYPE>
- ; 1057 1 ! The type defines the type of message that is being processed.
- ; 1058 1 !
- ; 1059 1 !--
- ; 1060 1
- ; 1061 1 ! Protocol version 1.0 message types
- ; 1062 1
- ; 1063 1 LITERAL
- ; 1064 1 MSG_DATA = %C'D', ! Data packet
- ; 1065 1 MSG_ACK = %C'Y', ! Acknowledgement
- ; 1066 1 MSG_NAK = %C'N', ! Negative acknowledgement
- ; 1067 1 MSG_SND_INIT = %C'S', ! Send initiate
- ; 1068 1 MSG_BREAK = %C'B', ! Break transmission
- ; 1069 1 MSG_FILE = %C'F', ! File header
- ; 1070 1 MSG_EOF = %C'Z', ! End of file (EOF)
- ; 1071 1 MSG_ERROR = %C'E'; ! Error
- ; 1072 1
- ; 1073 1 ! Protocol version 2.0 message types
- ; 1074 1
- ; 1075 1 LITERAL
- ; 1076 1 MSG_RCV_INIT = %C'R', ! Receive initiate
- ; 1077 1 MSG_COMMAND = %C'C', ! Host command
- ; 1078 1 MSG_GENERIC = %C'G', ! Generic KERMIT command.
- ; 1079 1 MSG_KERMIT = %C'K'; ! Perform KERMIT command (text)
- ; 1080 1
- ; 1081 1 ! Protocol version 4.0 message types
- ; 1082 1
- ; 1083 1 LITERAL
- ; 1084 1 MSG_SER_INIT = %C'I', ! Server initialization
- ; 1085 1 MSG_TEXT = %C'X'; ! Text header message
- ; 1086 1
- ; 1087 1 !++
- ; 1088 1 ! Generic KERMIT commands
- ; 1089 1 !--
- ; 1090 1
- ; 1091 1 LITERAL
- ; 1092 1 MSG_GEN_LOGIN = %C'I', ! Login
- ; 1093 1 MSG_GEN_EXIT = %C'F', ! Finish (exit to OS)
- ; 1094 1 MSG_GEN_CONNECT = %C'C', ! Connect to a directory
- ; 1095 1 MSG_GEN_LOGOUT = %C'L', ! Logout
- ; 1096 1 MSG_GEN_DIRECTORY = %C'D', ! Directory
- ; 1097 1 MSG_GEN_DISK_USAGE = %C'U', ! Disk usage
- ; 1098 1 MSG_GEN_DELETE = %C'E', ! Delete a file
- ; 1099 1 MSG_GEN_TYPE = %C'T', ! Type a file specification
- ; 1100 1 ! MSG_GEN_SUBMIT = %C'S', ! Submit
- ; 1101 1 ! MSG_GEN_PRINT = %C'P', ! Print
- ; 1102 1 MSG_GEN_WHO = %C'W', ! Who's logged in
- ; 1103 1 MSG_GEN_SEND = %C'M', ! Send a message to a user
- ; 1104 1 MSG_GEN_HELP = %C'H', ! Help
- ; 1105 1 MSG_GEN_QUERY = %C'Q', ! Query status
- ; 1106 1 MSG_GEN_RENAME = %C'R', ! Rename file
- ; 1107 1 MSG_GEN_COPY = %C'K', ! Copy file
- ; 1108 1 MSG_GEN_PROGRAM = %C'P', ! Run program and pass data
- ; 1109 1 MSG_GEN_JOURNAL = %C'J', ! Perform journal functions
- ; 1110 1 MSG_GEN_VARIABLE = %C'V'; ! Return/set variable state
- ; 1111 1
- ; 1112 1 !
- ; 1113 1 ! Acknowledgement modifiers (protocol 4.0)
- ; 1114 1 !
- ; 1115 1
- ; 1116 1 LITERAL
- ; 1117 1 MSG_ACK_ABT_CUR = %C'X', ! Abort current file
- ; 1118 1 MSG_ACK_ABT_ALL = %C'Z'; ! Abort entire stream of files
- ; 1119 1
- ; 1120 1 !
- ; 1121 1 ! End of file packet modifier
- ; 1122 1 !
- ; 1123 1
- ; 1124 1 LITERAL
- ; 1125 1 MSG_EOF_DISCARD = %C'D'; ! Discard data from previous file
- ; 1126 1
- ; 1127 1 %SBTTL 'KERMIT Protocol Definitions -- SEND initiate packet'
- ; 1128 1
- ; 1129 1 !++
- ; 1130 1 !
- ; 1131 1 ! The following describes the send initiate packet. All fields in the message
- ; 1132 1 ! data area are optional.
- ; 1133 1 !
- ; 1134 1 ! <"S"><CHAR(Bufsiz)><CHAR(Timeout)><CHAR(npad)><CTL(pad)><CHAR(Eol)><Quote>
- ; 1135 1 ! <8-bit-quote><Check-type><Repeat-count-processing><Reserved><Reserved>
- ; 1136 1 !
- ; 1137 1 ! BUFSIZ
- ; 1138 1 ! Sending Kermit's maximum buffer size.
- ; 1139 1 !
- ; 1140 1 ! Timeout
- ; 1141 1 ! Number of seconds after which the sending Kermit wishes to be timed out
- ; 1142 1 !
- ; 1143 1 ! Npad
- ; 1144 1 ! Number of padding caracters the sending Kermit needs preceding each
- ; 1145 1 ! packet.
- ; 1146 1 !
- ; 1147 1 ! PAD
- ; 1148 1 ! Padding character.
- ; 1149 1 !
- ; 1150 1 ! EOL
- ; 1151 1 ! A line terminator required on all packets set by the receiving
- ; 1152 1 ! Kermit.
- ; 1153 1 !
- ; 1154 1 ! Quote
- ; 1155 1 ! The printable ASCII characer the sending Kermit will use when quoting
- ; 1156 1 ! the control cahracters. Default is "#".
- ; 1157 1 !
- ; 1158 1 ! 8-bit-quote
- ; 1159 1 ! Specify quoting mecanism for 8-bit quantities. A quoting mecanism is
- ; 1160 1 ! mecessary when sending to hosts which prevent the use of the 8th bit
- ; 1161 1 ! for data. When elected, the quoting mechanism will be used by both
- ; 1162 1 ! hosts, and the quote character must be in the range of 41-76 or 140-176
- ; 1163 1 ! octal, but different from the control-quoting character. This field is
- ; 1164 1 ! interpreted as follows:
- ; 1165 1 !
- ; 1166 1 ! "Y" - I agree to 8-bit quoting if you request it.
- ; 1167 1 ! "N" - I will not do 8-bit quoting.
- ; 1168 1 ! "&" - (or any other character in the range of 41-76 or 140-176) I want
- ; 1169 1 ! to do 8-bit quoting using this character (it will be done if the
- ; 1170 1 ! other Kermit puts a "Y" in this field.
- ; 1171 1 ! Anything else: Quoting will not be done.
- ; 1172 1 !
- ; 1173 1 ! Check-type
- ; 1174 1 ! Type of block check. The only values presently allowed in this
- ; 1175 1 ! field are "1", "2" or "3". Future implementations may allow other
- ; 1176 1 ! values. Interpretation of the values is:
- ; 1177 1 !
- ; 1178 1 ! "1" - Single character checksum. Default value if none specified.
- ; 1179 1 ! "2" - Double character checksum.
- ; 1180 1 ! "3" - Three character CRC.
- ; 1181 1 !
- ; 1182 1 ! Repeat-count-processing
- ; 1183 1 ! The prefix character to be used to indicate a repeated character.
- ; 1184 1 ! This can be any printable cahracter other than blank (which denotes
- ; 1185 1 ! no repeat count).
- ; 1186 1 !
- ; 1187 1 ! [108] Capability byte(s)
- ; 1188 1 ! [108] Bit mask containing extra capabilities, currently we only use
- ; 1189 1 ! [108] bit 1 (extended-length packets) and bit 0 (more capability
- ; 1190 1 ! [108] bytes follows).
- ; 1191 1 ! [108]
- ; 1192 1 ! [108] Window length (not used)
- ; 1193 1 ! [108]
- ; 1194 1 ! [108] Extended packet length
- ; 1195 1 ! [108] Maximum length for extended-length packets
- ; 1196 1 !
- ; 1197 1 !--
- ; 1198 1
- ; 1199 1 LITERAL
- ; 1200 1 P_SI_BUFSIZ = 0, ! Buffersize
- ; 1201 1 MY_PKT_SIZE = 80, ! My packet size
- ; 1202 1 P_SI_TIMOUT = 1, ! Time out
- ; 1203 1 MY_TIME_OUT = 15, ! My time out
- ; 1204 1 P_SI_NPAD = 2, ! Number of padding characters
- ; 1205 1 MY_NPAD = 0, ! Amount of padding I require
- ; 1206 1 P_SI_PAD = 3, ! Padding character
- ; 1207 1 MY_PAD_CHAR = 0, ! My pad character
- ; 1208 1 P_SI_EOL = 4, ! End of line character
- ; 1209 1 MY_EOL_CHAR = %O'015', ! My EOL cahracter
- ; 1210 1 P_SI_QUOTE = 5, ! Quote character
- ; 1211 1 MY_QUOTE_CHAR = %C'#', ! My quoting character
- ; 1212 1 P_SI_8QUOTE = 6, ! 8-bit quote
- ; 1213 1 MY_8BIT_QUOTE = %C'&', ! Don't do it
- ; 1214 1 P_SI_CHKTYPE = 7, ! Checktype used
- ; 1215 1 MY_CHKTYPE = CHK_1CHAR, ! Use single character checksum
- ; 1216 1 P_SI_REPEAT = 8, ! Repeat character
- ; 1217 1 MY_REPEAT = %C'~', ! My repeat character
- ; 1218 1 P_SI_LENGTH = 9, ! Length of the std message
- ; 1219 1 ! [108]
- ; 1220 1 P_SI_CAPAS = 9, ! [108] ! Capability field (if used)
- ; 1221 1 EXTLEN_CAPAS = 2, ! [108] ! Extended length packets
- ; 1222 1 P_SI_WINDO = 10, ! [108] ! (Send only) Not used, filler
- ; 1223 1 P_SI_MAXLX1 = 11, ! [108] ! (Send only) Ext. len / 95
- ; 1224 1 MY_MAXLX1 = 0, ! [108]
- ; 1225 1 P_SI_MAXLX2 = 12, ! [108] ! (Send only) Ext. len MOD 95
- ; 1226 1 MY_MAXLX2 = 80, ! [108]
- ; 1227 1 ! [108]
- ; 1228 1 P_SI_XLENGTH = 13; ! [108] ! (Send only) Len of ext. msg
- ; 1229 1
- ; 1230 1 %SBTTL 'KERMIT Protocol States'
- ; 1231 1
- ; 1232 1 !++
- ; 1233 1 ! The following are the various states that KERMIT can be in.
- ; 1234 1 ! The state transitions are defined in the KERMIT Protocol manual.
- ; 1235 1 !--
- ; 1236 1
- ; 1237 1 LITERAL
- ; 1238 1 STATE_MIN = 1, ! Min state number
- ; 1239 1 STATE_S = 1, ! Send init state
- ; 1240 1 STATE_SF = 2, ! Send file header
- ; 1241 1 STATE_SD = 3, ! Send file data packet
- ; 1242 1 STATE_SZ = 4, ! Send EOF packet
- ; 1243 1 STATE_SB = 5, ! Send break
- ; 1244 1 STATE_R = 6, ! Receive state (wait for send-init)
- ; 1245 1 STATE_RF = 7, ! Receive file header packet
- ; 1246 1 STATE_RD = 8, ! Receive file data packet
- ; 1247 1 STATE_C = 9, ! Send complete
- ; 1248 1 STATE_A = 10, ! Abort
- ; 1249 1 STATE_SX = 11, ! Send text header
- ; 1250 1 STATE_SG = 12, ! Send generic command
- ; 1251 1 STATE_SI = 13, ! Send server init
- ; 1252 1 STATE_ID = 14, ! Server idle loop
- ; 1253 1 STATE_II = 15, ! Server idle after server init
- ; 1254 1 STATE_FI = 16, ! Server should exit
- ; 1255 1 STATE_LG = 17, ! Server should logout
- ; 1256 1 STATE_OF = 18, ! Send - open first input file
- ; 1257 1 STATE_EX = 19, ! Exit back to command parser
- ; 1258 1 STATE_ER = 20, ! Retries exceeded error
- ; 1259 1 STATE_MAX = 20; ! Max state number
- ; 1260 1
- ; 1261 1 %SBTTL 'Internal constants'
- ; 1262 1
- ; 1263 1 !++
- ; 1264 1 ! The following represent various internal KERMSG constants.
- ; 1265 1 !--
- ; 1266 1
- ; 1267 1 LITERAL
- ; 1268 1 MAX_PKT_RETRIES = 16, ! Maximum packet retries
- ; 1269 1 MAX_SI_RETRIES = 5; ! Maximum send init retries
- ; 1270 1
- ; 1271 1 %SBTTL 'Storage - External'
- ; 1272 1 !
- ; 1273 1 ! OWN STORAGE:
- ; 1274 1 !
- ; 1275 1
- ; 1276 1 EXTERNAL
- ; 1277 1 !
- ; 1278 1 ! Receive parameters
- ; 1279 1 !
- ; 1280 1 RCV_PKT_SIZE, ! Receive packet size
- ; 1281 1 RCV_NPAD, ! Padding length
- ; 1282 1 RCV_PADCHAR, ! Padding character
- ; 1283 1 RCV_TIMEOUT, ! Time out
- ; 1284 1 RCV_EOL, ! EOL character
- ; 1285 1 RCV_QUOTE_CHR, ! Quote character
- ; 1286 1 RCV_SOH, ! Start of header character
- ; 1287 1 RCV_8QUOTE_CHR, ! 8-bit quoting character
- ; 1288 1 !
- ; 1289 1 ! Miscellaneous parameters
- ; 1290 1 !
- ; 1291 1 SET_REPT_CHR, ! Repeat character
- ; 1292 1 !
- ; 1293 1 ! Send parameters
- ; 1294 1 !
- ; 1295 1 SND_PKT_SIZE, ! Send packet size
- ; 1296 1 SND_NPAD, ! Padding length
- ; 1297 1 SND_PADCHAR, ! Padding character
- ; 1298 1 SND_TIMEOUT, ! Time out
- ; 1299 1 SND_EOL, ! EOL character
- ; 1300 1 SND_QUOTE_CHR, ! Quote character
- ; 1301 1 SND_SOH, ! Start of header character
- ; 1302 1 SEND_TIMEOUT, ! Time to wait for receiving message
- ; 1303 1 !
- ; 1304 1 ! Server parameters
- ; 1305 1 !
- ; 1306 1 SRV_TIMEOUT, ! Time between NAK's when server is idle
- ; 1307 1 !
- ; 1308 1 ! Statistics
- ; 1309 1 !
- ; 1310 1 SND_TOTAL_CHARS, ! Total characters sent
- ; 1311 1 RCV_TOTAL_CHARS, ! Total characters received
- ; 1312 1 SND_DATA_CHARS, ! Total number of data characters sent
- ; 1313 1 RCV_DATA_CHARS, ! Total number of data characters received
- ; 1314 1 SND_NAKS, ! Total NAKs sent
- ; 1315 1 RCV_NAKS, ! Total NAKs received
- ; 1316 1 SND_COUNT, ! Count of total number of packets
- ; 1317 1 RCV_COUNT, ! Count of total number packets received
- ; 1318 1 SMSG_COUNT, ! Total number of packets sent
- ; 1319 1 RMSG_COUNT, ! Total number of packets received
- ; 1320 1 SMSG_TOTAL_CHARS, ! Total chars sent this file xfer
- ; 1321 1 RMSG_TOTAL_CHARS, ! Total chars rcvd this file xfer
- ; 1322 1 SMSG_DATA_CHARS, ! Total data chars this file xfer
- ; 1323 1 RMSG_DATA_CHARS, ! Total data chars this file xfer
- ; 1324 1 SMSG_NAKS, ! Total number of NAKs this file xfer
- ; 1325 1 RMSG_NAKS, ! Total number of NAKs received
- ; 1326 1 XFR_TIME, ! Amount of time last xfr took
- ; 1327 1 TOTAL_TIME, ! Total time of all xfrs
- ; 1328 1 ! this file xfer
- ; 1329 1 LAST_ERROR : VECTOR [CH$ALLOCATION (MAX_MSG + 1)], ! Last error message
- ; 1330 1 !
- ; 1331 1 ! Misc constants.
- ; 1332 1 !
- ; 1333 1 FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],
- ; 1334 1 FILE_SIZE,
- ; 1335 1 SI_RETRIES, ! Send init retries to attempt
- ; 1336 1 PKT_RETRIES, ! Number of retries to try for a message
- ; 1337 1 DELAY, ! Amount of time to delay
- ; 1338 1 DUPLEX, ! Type of connection (half or full)
- ; 1339 1 PARITY_TYPE, ! Type of parity to use
- ; 1340 1 DEV_PARITY_FLAG, ! True if output device does
- ; 1341 1 ! parity, false if we do it
- ; 1342 1 CHKTYPE, ! Type of block check desired
- ; 1343 1 ABT_FLAG, ! True if aborted file should be discarded
- ; 1344 1 DEBUG_FLAG, ! Debugging mode on/off
- ; 1345 1 WARN_FLAG, ! File warning flag
- ; 1346 1 IBM_CHAR, ! Turnaround character for IBM mode
- ; 1347 1 ECHO_FLAG, ! Local echo flag
- ; 1348 1 CONNECT_FLAG, ! Connected flag; True if
- ; 1349 1 ! terminal and SET LINE are
- ; 1350 1 ! the same
- ; 1351 1 ABT_CUR_FILE, ! Abort current file
- ; 1352 1 ABT_ALL_FILE, ! Abort all files in stream
- ; 1353 1 TYP_STS_FLAG, ! Type status next message
- ; 1354 1 TY_FIL, ! Type file specs
- ; 1355 1 TY_PKT, ! Type packet info
- ; 1356 1 FIL_NORMAL_FORM, ! If true, file names should be normalized
- ; 1357 1 GEN_1DATA : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Data for generic command
- ; 1358 1 GEN_1SIZE, ! Size of data in GEN_1DATA
- ; 1359 1 GEN_2DATA : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Second argument for generic command
- ; 1360 1 GEN_2SIZE, ! Size of data in GEN_2DATA
- ; 1361 1 GEN_3DATA : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Third arg for generic command
- ; 1362 1 GEN_3SIZE; ! Size of data in GEN_3DATA
- ; 1363 1
- ; 1364 1 %SBTTL 'Storage - Local'
- ; 1365 1 !
- ; 1366 1 ! LOCAL OWN STORAGE:
- ; 1367 1 !
- ; 1368 1
- ; 1369 1 OWN
- ; 1370 1 !
- ; 1371 1 ! Receive parameters
- ; 1372 1 !
- ; 1373 1 RECV_8QUOTE_CHR, ! 8th-bit quoting character
- ; 1374 1 REPT_CHR, ! Repeat prefix character
- ; 1375 1 RECV_PKT_MSG, ! [108] ! Msg offset (4 std, 7 ext.)
- ; 1376 1 !
- ; 1377 1 ! Send parameters
- ; 1378 1 !
- ; 1379 1 SEND_PKT_SIZE, ! Send packet size
- ; 1380 1 SEND_NPAD, ! Padding length
- ; 1381 1 SEND_PADCHAR, ! Padding character
- ; 1382 1 SEND_EOL, ! EOL character
- ; 1383 1 SEND_QUOTE_CHR, ! Quote character
- ; 1384 1 SEND_8QUOTE_CHR, ! 8-bit quoting character
- ; 1385 1 SEND_INIT_SIZE, ! [108] ! Size of INIT message
- ; 1386 1 !
- ; 1387 1 ! Misc parameters
- ; 1388 1 !
- ; 1389 1 INI_CHK_TYPE, ! Type of block checking from init message
- ; 1390 1 BLK_CHK_TYPE, ! Type of block check to use
- ; 1391 1 FLAG_8QUOTE, ! Flag to determine if doing 8bit quoting
- ; 1392 1 FLAG_REPEAT, ! True if doing repeated character compression
- ; 1393 1 STATE, ! Current state
- ; 1394 1 SIZE, ! Size of the current message
- ; 1395 1 ! [108] Negative len for ext msgs
- ; 1396 1 OLD_RETRIES, ! Saved number of retries done.
- ; 1397 1 NUM_RETRIES, ! Number of retries
- ; 1398 1 MSG_NUMBER, ! Current message number
- ; 1399 1 REC_SEQ, ! Sequence number of msg in REC_MSG
- ; 1400 1 REC_LENGTH, ! Length of the message recv'd
- ; 1401 1 REC_TYPE, ! Type of the message received.
- ; 1402 1 REC_MSG : VECTOR [CH$ALLOCATION (MAX_MSG + 1, CHR_SIZE)], ! Message received
- ; 1403 1 SND_MSG : VECTOR [CH$ALLOCATION (MAX_MSG + 1, CHR_SIZE)], ! Message sent
- ; 1404 1 FILE_CHARS, ! Number of characters sent or received
- ; 1405 1 TEXT_HEAD_FLAG, ! Text header received, not file header
- ; 1406 1 NO_FILE_NEEDED, ! Don't open a file
- ; 1407 1 INIT_PKT_SENT, ! Server-init sent and ACKed
- ; 1408 1 GEN_TYPE, ! Command message type
- ; 1409 1 GEN_SUBTYPE, ! Generic command subtype
- ; 1410 1 GET_CHR_ROUTINE, ! Address of routine to get a character for BFR_FILL
- ; 1411 1 PUT_CHR_ROUTINE; ! Address of routine to put a character for BFR_EMPTY
- ; 1412 1 !
- ; 1413 1 ! KERMSG Global storage
- ; 1414 1 !
- ; 1415 1 GLOBAL
- ; 1416 1 FLAG_FILE_OPEN; ! File is opened.
- ; 1417 1
- ; 1418 1 %SBTTL 'External references'
- ; 1419 1 !
- ; 1420 1 ! EXTERNAL REFERENCES:
- ; 1421 1 !
- ; 1422 1 ! Packet I/O routines
- ; 1423 1
- ; 1424 1 EXTERNAL ROUTINE
- ; 1425 1 SEND, ! Send a packet to the remote
- ; 1426 1 IBM_WAIT, ! Wait for IBM turnaround
- ; 1427 1 RECEIVE; ! Receive a packet from the remote
- ; 1428 1
- ; 1429 1 !
- ; 1430 1 ! Terminal I/O routines
- ; 1431 1 !
- ; 1432 1
- ; 1433 1 EXTERNAL ROUTINE
- ; 1434 1 TERM_DUMP : NOVALUE, ! Normal terminal output
- ; 1435 1 DBG_DUMP : NOVALUE, ! Debugging output
- ; 1436 1 TT_SET_OUTPUT, ! Set output routine
- ; 1437 1 TT_CHAR : NOVALUE, ! Output a single character
- ; 1438 1 TT_CRLF : NOVALUE, ! Output a CRLF
- ; 1439 1 TT_NUMBER : NOVALUE, ! Output a three digit number to the
- ; 1440 1 ! terminal
- ; 1441 1 TT_TEXT : NOVALUE, ! Output a string to the user's
- ; 1442 1 TT_OUTPUT : NOVALUE; ! Force buffered output to terminal
- ; 1443 1
- ; 1444 1 ! Operating system routines and misc routines
- ; 1445 1
- ; 1446 1 EXTERNAL ROUTINE
- ; 1447 1 CRCCLC, ! Calculate a CRC-CCITT
- ; 1448 1 XFR_STATUS : NOVALUE, ! Routine to tell the user the
- ; 1449 1 ! status of a transfer
- ; 1450 1 KRM_ERROR : NOVALUE, ! Issue an error message
- ; 1451 1 SY_LOGOUT : NOVALUE, ! Log the job off
- ; 1452 1 SY_GENERIC, ! Perform a generic command
- ; 1453 1 SY_TIME, ! Return elapsed time in milliseconds
- ; 1454 1 SY_DISMISS : NOVALUE; ! Routine to dismiss for n seconds.
- ; 1455 1
- ; 1456 1 !
- ; 1457 1 ! External file processing routines
- ; 1458 1 !
- ; 1459 1
- ; 1460 1 EXTERNAL ROUTINE
- ; 1461 1 FILE_OPEN, ! Open a file for reading/writing
- ; 1462 1 FILE_CLOSE, ! Close an open file
- ; 1463 1 NEXT_FILE, ! Determine if there is a next file
- ; 1464 1 ! and open it for reading.
- ; 1465 1 GET_FILE, ! Get a byte from the file
- ; 1466 1 PUT_FILE; ! Put a byte in the file.
- ; 1467 1
- ; 1468 1 %SBTTL 'MSG_INIT'
- ; 1469 1
- ; 1470 1 GLOBAL ROUTINE MSG_INIT : NOVALUE =
- ; 1471 1
- ; 1472 1 !++
- ; 1473 1 ! FUNCTIONAL DESCRIPTION:
- ; 1474 1 !
- ; 1475 1 ! This routine will initialize the message processing for
- ; 1476 1 ! KERMIT-32/36.
- ; 1477 1 !
- ; 1478 1 ! CALLING SEQUENCE:
- ; 1479 1 !
- ; 1480 1 ! MSG_INIT();
- ; 1481 1 !
- ; 1482 1 ! INPUT PARAMETERS:
- ; 1483 1 !
- ; 1484 1 ! None.
- ; 1485 1 !
- ; 1486 1 ! IMPLICIT INPUTS:
- ; 1487 1 !
- ; 1488 1 ! None.
- ; 1489 1 !
- ; 1490 1 ! OUTPUT PARAMETERS:
- ; 1491 1 !
- ; 1492 1 ! None.
- ; 1493 1 !
- ; 1494 1 ! IMPLICIT OUTPUTS:
- ; 1495 1 !
- ; 1496 1 ! None.
- ; 1497 1 !
- ; 1498 1 ! COMPLETION CODES:
- ; 1499 1 !
- ; 1500 1 ! None.
- ; 1501 1 !
- ; 1502 1 ! SIDE EFFECTS:
- ; 1503 1 !
- ; 1504 1 ! None.
- ; 1505 1 !
- ; 1506 1 !--
- ; 1507 1
- ; 1508 2 BEGIN
- ; 1509 2 !
- ; 1510 2 ! Initialize some variables
- ; 1511 2 !
- ; 1512 2 ! Receive parameters first
- ; 1513 2 !
- ; 1514 2 RCV_PKT_SIZE = MY_PKT_SIZE;
- ; 1515 2 RCV_NPAD = MY_NPAD;
- ; 1516 2 RCV_PADCHAR = MY_PAD_CHAR;
- ; 1517 2 RCV_TIMEOUT = MY_TIME_OUT;
- ; 1518 2 RCV_EOL = MY_EOL_CHAR;
- ; 1519 2 RCV_QUOTE_CHR = MY_QUOTE_CHAR;
- ; 1520 2 RCV_SOH = CHR_SOH;
- ; 1521 2 RCV_8QUOTE_CHR = MY_8BIT_QUOTE;
- ; 1522 2 SET_REPT_CHR = MY_REPEAT;
- ; 1523 2 !
- ; 1524 2 ! Send parameters.
- ; 1525 2 !
- ; 1526 2 SND_PKT_SIZE = -MY_PKT_SIZE;
- ; 1527 2 SND_NPAD = -MY_NPAD;
- ; 1528 2 SND_PADCHAR = -MY_PAD_CHAR;
- ; 1529 2 SND_TIMEOUT = -MY_TIME_OUT;
- ; 1530 2 SND_EOL = -MY_EOL_CHAR;
- ; 1531 2 SND_QUOTE_CHR = -MY_QUOTE_CHAR;
- ; 1532 2 SND_SOH = CHR_SOH;
- ; 1533 2 !
- ; 1534 2 ! Server parameters
- ; 1535 2 !
- ; 1536 2 SRV_TIMEOUT = 5*MY_TIME_OUT;
- ; 1537 2 !
- ; 1538 2 ! Other random parameters
- ; 1539 2 !
- ; 1540 2 PKT_RETRIES = MAX_PKT_RETRIES; ! Number of retries per message
- ; 1541 2 SI_RETRIES = MAX_SI_RETRIES; ! Number of retries on send inits
- ; 1542 2 DELAY = INIT_DELAY;
- ; 1543 2 DUPLEX = DP_FULL; ! Use full duplex
- ; 1544 2 DEBUG_FLAG = FALSE;
- ; 1545 2 WARN_FLAG = FALSE;
- ; 1546 2 ECHO_FLAG = FALSE;
- ; 1547 2 BLK_CHK_TYPE = CHK_1CHAR; ! Start using single char checksum
- ; 1548 2 CHKTYPE = MY_CHKTYPE; ! Desired block check type
- ; 1549 2 INI_CHK_TYPE = .CHKTYPE; ! Same as default for now
- ; 1550 2 DEV_PARITY_FLAG = FALSE; ! We generate parity
- ; 1551 2 PARITY_TYPE = PR_NONE; ! No parity
- ; 1552 2 ABT_FLAG = TRUE; ! Discard incomplete files
- ; 1553 2 FLAG_FILE_OPEN = FALSE;
- ; 1554 2 IBM_CHAR = -1; ![044] No handsake by default
- ; 1555 2 TY_FIL = TRUE; ! Default to typing files
- ; 1556 2 TY_PKT = FALSE; ! But not packet numbers
- ; 1557 2 FIL_NORMAL_FORM = FNM_NORMAL; ! Default to normal form names
- ; 1558 2 GET_CHR_ROUTINE = GET_FILE; ![025] Initialize the get-a-char routine
- ; 1559 2 PUT_CHR_ROUTINE = PUT_FILE; ![025] And the put-a-char
- ; 1560 1 END; ! End of MSG_INIT
-
-
- .TITLE KERMSG KERMSG - Kermit message processing
- .IDENT \3.3.111\
-
- .PSECT $OWN$,NOEXE,2
-
- ;RECV_8QUOTE_CHR
- U.37: .BLKB 4 ; 00000
- ;REPT_CHR
- U.38: .BLKB 4 ; 00004
- ;RECV_PKT_MSG
- U.39: .BLKB 4 ; 00008
- ;SEND_PKT_SIZE
- U.40: .BLKB 4 ; 0000C
- ;SEND_NPAD
- U.41: .BLKB 4 ; 00010
- ;SEND_PADCHAR
- U.42: .BLKB 4 ; 00014
- ;SEND_EOL
- U.43: .BLKB 4 ; 00018
- ;SEND_QUOTE_CHR
- U.44: .BLKB 4 ; 0001C
- ;SEND_8QUOTE_CHR
- U.45: .BLKB 4 ; 00020
- ;SEND_INIT_SIZE
- U.46: .BLKB 4 ; 00024
- ;INI_CHK_TYPE
- U.47: .BLKB 4 ; 00028
- ;BLK_CHK_TYPE
- U.48: .BLKB 4 ; 0002C
- ;FLAG_8QUOTE
- U.49: .BLKB 4 ; 00030
- ;FLAG_REPEAT
- U.50: .BLKB 4 ; 00034
- ;STATE
- U.51: .BLKB 4 ; 00038
- ;SIZE
- U.52: .BLKB 4 ; 0003C
- ;OLD_RETRIES
- U.53: .BLKB 4 ; 00040
- ;NUM_RETRIES
- U.54: .BLKB 4 ; 00044
- ;MSG_NUMBER
- U.55: .BLKB 4 ; 00048
- ;REC_SEQ
- U.56: .BLKB 4 ; 0004C
- ;REC_LENGTH
- U.57: .BLKB 4 ; 00050
- ;REC_TYPE
- U.58: .BLKB 4 ; 00054
- ;REC_MSG
- U.59: .BLKB 1004 ; 00058
- ;SND_MSG
- U.60: .BLKB 1004 ; 00444
- ;FILE_CHARS
- U.61: .BLKB 4 ; 00830
- ;TEXT_HEAD_FLAG
- U.62: .BLKB 4 ; 00834
- ;NO_FILE_NEEDED
- U.63: .BLKB 4 ; 00838
- ;INIT_PKT_SENT
- U.64: .BLKB 4 ; 0083C
- ;GEN_TYPE
- U.65: .BLKB 4 ; 00840
- ;GEN_SUBTYPE
- U.66: .BLKB 4 ; 00844
- ;GET_CHR_ROUTINE
- U.67: .BLKB 4 ; 00848
- ;PUT_CHR_ROUTINE
- U.68: .BLKB 4 ; 0084C
-
- .PSECT $GLOBAL$,NOEXE,2
-
- FLAG_FILE_OPEN::
- .BLKB 4 ; 00000
-
- FNM_NORMAL== 1
- FNM_FULL== 2
- FNM_UNTRAN== 4
- PR_MIN== 0
- PR_NONE== 0
- PR_MARK== 1
- PR_EVEN== 2
- PR_ODD== 3
- PR_SPACE== 4
- PR_MAX== 4
- GC_MIN== 1
- GC_EXIT== 1
- GC_DIRECTORY== 2
- GC_DISK_USAGE== 3
- GC_DELETE== 4
- GC_TYPE== 5
- GC_HELP== 6
- GC_LOGOUT== 7
- GC_LGN== 8
- GC_CONNECT== 9
- GC_RENAME== 10
- GC_COPY== 11
- GC_WHO== 12
- GC_SEND_MSG== 13
- GC_STATUS== 14
- GC_COMMAND== 15
- GC_KERMIT== 16
- GC_JOURNAL== 17
- GC_VARIABLE== 18
- GC_PROGRAM== 19
- GC_MAX== 19
- DP_FULL== 0
- DP_HALF== 1
- CHK_1CHAR== 49
- CHK_2CHAR== 50
- CHK_CRC== 51
- MAX_MSG== 1002
- .EXTRN RCV_PKT_SIZE, RCV_NPAD, RCV_PADCHAR, RCV_TIMEOUT, RCV_EOL, RCV_QUOTE_CHR, RCV_SOH
- .EXTRN RCV_8QUOTE_CHR, SET_REPT_CHR, SND_PKT_SIZE, SND_NPAD, SND_PADCHAR, SND_TIMEOUT, SND_EOL
- .EXTRN SND_QUOTE_CHR, SND_SOH, SEND_TIMEOUT, SRV_TIMEOUT, SND_TOTAL_CHARS, RCV_TOTAL_CHARS
- .EXTRN SND_DATA_CHARS, RCV_DATA_CHARS, SND_NAKS, RCV_NAKS, SND_COUNT, RCV_COUNT, SMSG_COUNT
- .EXTRN RMSG_COUNT, SMSG_TOTAL_CHARS, RMSG_TOTAL_CHARS, SMSG_DATA_CHARS, RMSG_DATA_CHARS, SMSG_NAKS
- .EXTRN RMSG_NAKS, XFR_TIME, TOTAL_TIME, LAST_ERROR, FILE_NAME, FILE_SIZE, SI_RETRIES, PKT_RETRIES
- .EXTRN DELAY, DUPLEX, PARITY_TYPE, DEV_PARITY_FLAG, CHKTYPE, ABT_FLAG, DEBUG_FLAG, WARN_FLAG
- .EXTRN IBM_CHAR, ECHO_FLAG, CONNECT_FLAG, ABT_CUR_FILE, ABT_ALL_FILE, TYP_STS_FLAG, TY_FIL
- .EXTRN TY_PKT, FIL_NORMAL_FORM, GEN_1DATA, GEN_1SIZE, GEN_2DATA, GEN_2SIZE, GEN_3DATA, GEN_3SIZE
- .EXTRN SEND, IBM_WAIT, RECEIVE, TERM_DUMP, DBG_DUMP, TT_SET_OUTPUT, TT_CHAR, TT_CRLF, TT_NUMBER
- .EXTRN TT_TEXT, TT_OUTPUT, CRCCLC, XFR_STATUS, KRM_ERROR, SY_LOGOUT, SY_GENERIC, SY_TIME
- .EXTRN SY_DISMISS, FILE_OPEN, FILE_CLOSE, NEXT_FILE, GET_FILE, PUT_FILE
-
- .PSECT $CODE$,NOWRT,2
-
- .ENTRY MSG_INIT, ^M<R2,R3> ;MSG_INIT, Save R2,R3 1470 000C 00000
- MOVAB G^CHKTYPE, R3 ;CHKTYPE, R3 53 00000000G 00 9E 00002
- MOVAB G^U.48, R2 ;U.48, R2 52 00000000' 00 9E 00009
- MOVZBL #80, G^RCV_PKT_SIZE ;#80, RCV_PKT_SIZE 1514 00000000G 00 50 8F 9A 00010
- CLRL G^RCV_NPAD ;RCV_NPAD 1515 00000000G 00 D4 00018
- CLRL G^RCV_PADCHAR ;RCV_PADCHAR 1516 00000000G 00 D4 0001E
- MOVL #15, G^RCV_TIMEOUT ;#15, RCV_TIMEOUT 1517 00000000G 00 0F D0 00024
- MOVL #13, G^RCV_EOL ;#13, RCV_EOL 1518 00000000G 00 0D D0 0002B
- MOVL #35, G^RCV_QUOTE_CHR ;#35, RCV_QUOTE_CHR 1519 00000000G 00 23 D0 00032
- MOVL #1, G^RCV_SOH ;#1, RCV_SOH 1520 00000000G 00 01 D0 00039
- MOVL #38, G^RCV_8QUOTE_CHR ;#38, RCV_8QUOTE_CHR 1521 00000000G 00 26 D0 00040
- MOVZBL #126, G^SET_REPT_CHR ;#126, SET_REPT_CHR 1522 00000000G 00 7E 8F 9A 00047
- CVTBL #-80, G^SND_PKT_SIZE ;#-80, SND_PKT_SIZE 1526 00000000G 00 B0 8F 98 0004F
- CLRL G^SND_NPAD ;SND_NPAD 1527 00000000G 00 D4 00057
- CLRL G^SND_PADCHAR ;SND_PADCHAR 1528 00000000G 00 D4 0005D
- MNEGL #15, G^SND_TIMEOUT ;#15, SND_TIMEOUT 1529 00000000G 00 0F CE 00063
- MNEGL #13, G^SND_EOL ;#13, SND_EOL 1530 00000000G 00 0D CE 0006A
- MNEGL #35, G^SND_QUOTE_CHR ;#35, SND_QUOTE_CHR 1531 00000000G 00 23 CE 00071
- MOVL #1, G^SND_SOH ;#1, SND_SOH 1532 00000000G 00 01 D0 00078
- MOVZBL #75, G^SRV_TIMEOUT ;#75, SRV_TIMEOUT 1536 00000000G 00 4B 8F 9A 0007F
- MOVL #16, G^PKT_RETRIES ;#16, PKT_RETRIES 1540 00000000G 00 10 D0 00087
- MOVL #5, G^SI_RETRIES ;#5, SI_RETRIES 1541 00000000G 00 05 D0 0008E
- MOVL #5, G^DELAY ;#5, DELAY 1542 00000000G 00 05 D0 00095
- CLRL G^DUPLEX ;DUPLEX 1543 00000000G 00 D4 0009C
- CLRL G^DEBUG_FLAG ;DEBUG_FLAG 1544 00000000G 00 D4 000A2
- CLRL G^WARN_FLAG ;WARN_FLAG 1545 00000000G 00 D4 000A8
- CLRL G^ECHO_FLAG ;ECHO_FLAG 1546 00000000G 00 D4 000AE
- MOVL #49, (R2) ;#49, BLK_CHK_TYPE 1547 62 31 D0 000B4
- MOVL #49, (R3) ;#49, CHKTYPE 1548 63 31 D0 000B7
- MOVL (R3), -4(R2) ;CHKTYPE, INI_CHK_TYPE 1549 FC A2 63 D0 000BA
- CLRL G^DEV_PARITY_FLAG ;DEV_PARITY_FLAG 1550 00000000G 00 D4 000BE
- CLRL G^PARITY_TYPE ;PARITY_TYPE 1551 00000000G 00 D4 000C4
- MOVL #1, G^ABT_FLAG ;#1, ABT_FLAG 1552 00000000G 00 01 D0 000CA
- CLRL G^FLAG_FILE_OPEN ;FLAG_FILE_OPEN 1553 00000000' 00 D4 000D1
- MNEGL #1, G^IBM_CHAR ;#1, IBM_CHAR 1554 00000000G 00 01 CE 000D7
- MOVL #1, G^TY_FIL ;#1, TY_FIL 1555 00000000G 00 01 D0 000DE
- CLRL G^TY_PKT ;TY_PKT 1556 00000000G 00 D4 000E5
- MOVL #1, G^FIL_NORMAL_FORM ;#1, FIL_NORMAL_FORM 1557 00000000G 00 01 D0 000EB
- MOVAB G^GET_FILE, 2076(R2) ;GET_FILE, GET_CHR_ROUTINE 1558 081C C2 00000000G 00 9E 000F2
- MOVAB G^PUT_FILE, 2080(R2) ;PUT_FILE, PUT_CHR_ROUTINE 1559 0820 C2 00000000G 00 9E 000FB
- RET ; 1560 04 00104
-
- ; Routine Size: 261 bytes, Routine Base: $CODE$ + 0000
-
-
- ; 1561 1
- ; 1562 1 %SBTTL 'SND_ERROR'
- ; 1563 1
- ; 1564 1 GLOBAL ROUTINE SND_ERROR (COUNT, ADDRESS) : NOVALUE =
- ; 1565 1
- ; 1566 1 !++
- ; 1567 1 ! FUNCTIONAL DESCRIPTION:
- ; 1568 1 !
- ; 1569 1 ! This routine will send an error packet to the remote KERMIT. It
- ; 1570 1 ! is called with the count of characters and the address of the text.
- ; 1571 1 !
- ; 1572 1 ! CALLING SEQUENCE:
- ; 1573 1 !
- ; 1574 1 ! SND_ERROR(COUNT, %ASCII 'Error text');
- ; 1575 1 !
- ; 1576 1 ! INPUT PARAMETERS:
- ; 1577 1 !
- ; 1578 1 ! None.
- ; 1579 1 !
- ; 1580 1 ! IMPLICIT INPUTS:
- ; 1581 1 !
- ; 1582 1 ! None.
- ; 1583 1 !
- ; 1584 1 ! OUTPUT PARAMETERS:
- ; 1585 1 !
- ; 1586 1 ! None.
- ; 1587 1 !
- ; 1588 1 ! IMPLICIT OUTPUTS:
- ; 1589 1 !
- ; 1590 1 ! None.
- ; 1591 1 !
- ; 1592 1 ! COMPLETION CODES:
- ; 1593 1 !
- ; 1594 1 ! None.
- ; 1595 1 !
- ; 1596 1 ! SIDE EFFECTS:
- ; 1597 1 !
- ; 1598 1 !
- ; 1599 1 !--
- ; 1600 1
- ; 1601 2 BEGIN
- ; 1602 2 !
- ; 1603 2 ! Pack the message into the buffer
- ; 1604 2 !
- ; 1605 2 SET_STRING (CH$PTR (.ADDRESS), .COUNT, TRUE);
- ; 1606 2 BFR_FILL (TRUE);
- ; 1607 2 SET_STRING (0, 0, FALSE);
- ; 1608 2 !
- ; 1609 2 ! Save the last error message also
- ; 1610 2 !
- ; 1611 2
- ; 1612 2 IF .COUNT GTR MAX_MSG THEN COUNT = MAX_MSG;
- ; 1613 2
- ; 1614 2 CH$COPY (.COUNT, CH$PTR (.ADDRESS), 0, MAX_MSG + 1, CH$PTR (LAST_ERROR));
- ; 1615 2
- ; 1616 2 IF NOT SEND_PACKET (MSG_ERROR, .SIZE, .MSG_NUMBER) THEN RETURN KER_ABORTED;
- ; 1617 2
- ; 1618 1 END; ! End of SND_ERROR
-
-
-
-
-
- .ENTRY SND_ERROR, ^M<R2,R3,R4,R5,R6> ;SND_ERROR, Save R2,R3,R4,R5,R6 1564 007C 00000
- MOVAB G^U.30, R6 ;U.30, R6 56 00000000V 00 9E 00002
- PUSHL #1 ;#1 1605 01 DD 00009
- PUSHL 4(AP) ;COUNT 04 AC DD 0000B
- PUSHL 8(AP) ;ADDRESS 08 AC DD 0000E
- CALLS #3, (R6) ;#3, SET_STRING 66 03 FB 00011
- PUSHL #1 ;#1 1606 01 DD 00014
- CALLS #1, G^U.29 ;#1, U.29 00000000V 00 01 FB 00016
- CLRQ -(SP) ;-(SP) 1607 7E 7C 0001D
- CLRL -(SP) ;-(SP) 7E D4 0001F
- CALLS #3, (R6) ;#3, SET_STRING 66 03 FB 00021
- CMPL 4(AP), #1002 ;COUNT, #1002 1612 000003EA 8F 04 AC D1 00024
- BLEQ 1$ ;1$ 06 15 0002C
- MOVZWL #1002, 4(AP) ;#1002, COUNT 04 AC 03EA 8F 3C 0002E
- 1$: MOVC5 4(AP), @8(AP), #0, #1003, - ;COUNT, @ADDRESS, #0, #1003, - 1614 08 BC 04 AC 2C 00034
- G^LAST_ERROR ;LAST_ERROR 03EB 8F 00 00039
- ; 00000000G 00 0003D
- PUSHL G^U.55 ;U.55 1616 00000000' 00 DD 00042
- PUSHL G^U.52 ;U.52 00000000' 00 DD 00048
- MOVZBL #69, -(SP) ;#69, -(SP) 7E 45 8F 9A 0004E
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 00052
- RET ; 1618 04 00059
-
- ; Routine Size: 90 bytes, Routine Base: $CODE$ + 0105
-
-
- ; 1619 1
- ; 1620 1 %SBTTL 'SERVER - Server mode'
- ; 1621 1
- ; 1622 1 GLOBAL ROUTINE SERVER =
- ; 1623 1
- ; 1624 1 !++
- ; 1625 1 ! FUNCTIONAL DESCRIPTION:
- ; 1626 1 !
- ; 1627 1 ! This routine will handle the server function in the v2.0 protocol
- ; 1628 1 ! for KERMIT. This routine by it's nature will call various operating
- ; 1629 1 ! system routines to do things like logging off the system.
- ; 1630 1 !
- ; 1631 1 ! CALLING SEQUENCE:
- ; 1632 1 !
- ; 1633 1 ! EXIT_FLAG = SERVER();
- ; 1634 1 !
- ; 1635 1 ! INPUT PARAMETERS:
- ; 1636 1 !
- ; 1637 1 ! None.
- ; 1638 1 !
- ; 1639 1 ! IMPLICIT INPUTS:
- ; 1640 1 !
- ; 1641 1 ! None.
- ; 1642 1 !
- ; 1643 1 ! OUTPUT PARAMETERS:
- ; 1644 1 !
- ; 1645 1 ! None.
- ; 1646 1 !
- ; 1647 1 ! IMPLICIT OUTPUTS:
- ; 1648 1 !
- ; 1649 1 ! None.
- ; 1650 1 !
- ; 1651 1 ! COMPLETION CODES:
- ; 1652 1 !
- ; 1653 1 ! None.
- ; 1654 1 !
- ; 1655 1 ! SIDE EFFECTS:
- ; 1656 1 !
- ; 1657 1 ! None.
- ; 1658 1 !
- ; 1659 1 !--
- ; 1660 1
- ; 1661 2 BEGIN
- ; 1662 2
- ; 1663 2 LOCAL
- ; 1664 2 STATUS; ! Status returned by various routines
- ; 1665 2
- ; 1666 2 DO
- ; 1667 3 BEGIN
- ; 1668 3 INIT_XFR ();
- ; 1669 3 XFR_STATUS (%C'T', %C'I'); ! Now idle
- ; 1670 3 STATUS = DO_TRANSACTION (STATE_ID);
- ; 1671 3 END
- ; 1672 2 UNTIL .STATUS EQL KER_EXIT OR .STATUS EQL KER_ABORTED;
- ; 1673 2
- ; 1674 2 RETURN .STATUS;
- ; 1675 1 END; ! End of GLOBAL ROUTINE SERVER
-
-
-
-
-
- .ENTRY SERVER, ^M<R2> ;SERVER, Save R2 1622 0004 00000
- 1$: CALLS #0, G^U.32 ;#0, U.32 1668 00000000V 00 00 FB 00002
- MOVZBL #73, -(SP) ;#73, -(SP) 1669 7E 49 8F 9A 00009
- MOVZBL #84, -(SP) ;#84, -(SP) 7E 54 8F 9A 0000D
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 00011
- PUSHL #14 ;#14 1670 0E DD 00018
- CALLS #1, G^U.1 ;#1, U.1 00000000V 00 01 FB 0001A
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00021
- CMPL R2, #134316203 ;STATUS, #134316203 1672 080180AB 8F 52 D1 00024
- BEQL 2$ ;2$ 09 13 0002B
- CMPL R2, #134316258 ;STATUS, #134316258 080180E2 8F 52 D1 0002D
- BNEQ 1$ ;1$ CC 12 00034
- 2$: MOVL R2, R0 ;STATUS, R0 1674 50 52 D0 00036
- RET ; 04 00039
-
- ; Routine Size: 58 bytes, Routine Base: $CODE$ + 015F
-
-
- ; 1676 1
- ; 1677 1 %SBTTL 'SEND_SWITCH'
- ; 1678 1
- ; 1679 1 GLOBAL ROUTINE SEND_SWITCH =
- ; 1680 1
- ; 1681 1 !++
- ; 1682 1 ! FUNCTIONAL DESCRIPTION:
- ; 1683 1 !
- ; 1684 1 ! This routine is the state table switcher for sending files. It
- ; 1685 1 ! loops until either it is finished or an error is encountered. The
- ; 1686 1 ! routines called by SEND_SWITCH are responsible for changing the state.
- ; 1687 1 !
- ; 1688 1 ! CALLING SEQUENCE:
- ; 1689 1 !
- ; 1690 1 ! SEND_SWITCH();
- ; 1691 1 !
- ; 1692 1 ! INPUT PARAMETERS:
- ; 1693 1 !
- ; 1694 1 ! None.
- ; 1695 1 !
- ; 1696 1 ! IMPLICIT INPUTS:
- ; 1697 1 !
- ; 1698 1 ! None.
- ; 1699 1 !
- ; 1700 1 ! OUTPUT PARAMETERS:
- ; 1701 1 !
- ; 1702 1 ! Returns:
- ; 1703 1 ! TRUE - File sent correctly.
- ; 1704 1 ! FALSE - Aborted sending the file.
- ; 1705 1 !
- ; 1706 1 ! IMPLICIT OUTPUTS:
- ; 1707 1 !
- ; 1708 1 ! None.
- ; 1709 1 !
- ; 1710 1 ! COMPLETION CODES:
- ; 1711 1 !
- ; 1712 1 ! None.
- ; 1713 1 !
- ; 1714 1 ! SIDE EFFECTS:
- ; 1715 1 !
- ; 1716 1 ! None.
- ; 1717 1 !
- ; 1718 1 !--
- ; 1719 1
- ; 1720 2 BEGIN
- ; 1721 2
- ; 1722 2 LOCAL
- ; 1723 2 STATUS; ! Status result
- ; 1724 2
- ; 1725 2 IF .CONNECT_FLAG THEN SY_DISMISS (.DELAY); ! Sleep if the user wanted us to
- ; 1726 2
- ; 1727 2 INIT_XFR (); ! Initialize for this transfer
- ; 1728 2 TEXT_HEAD_FLAG = FALSE; ! Set text flag correctly
- ; 1729 2 XFR_STATUS (%C'I', %C'S'); ! Start of file send
- ; 1730 2 STATUS = DO_TRANSACTION (STATE_S); ! Call routine to do real work
- ; 1731 2 XFR_STATUS (%C'T', %C'S'); ! Done with send
- ; 1732 2 RETURN .STATUS; ! Return the result
- ; 1733 1 END;
-
-
-
-
-
- .ENTRY SEND_SWITCH, ^M<R2,R3> ;SEND_SWITCH, Save R2,R3 1679 000C 00000
- MOVAB G^XFR_STATUS, R3 ;XFR_STATUS, R3 53 00000000G 00 9E 00002
- BLBC G^CONNECT_FLAG, 1$ ;CONNECT_FLAG, 1$ 1725 0D 00000000G 00 E9 00009
- PUSHL G^DELAY ;DELAY 00000000G 00 DD 00010
- CALLS #1, G^SY_DISMISS ;#1, SY_DISMISS 00000000G 00 01 FB 00016
- 1$: CALLS #0, G^U.32 ;#0, U.32 1727 00000000V 00 00 FB 0001D
- CLRL G^U.62 ;U.62 1728 00000000' 00 D4 00024
- MOVZBL #83, -(SP) ;#83, -(SP) 1729 7E 53 8F 9A 0002A
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 0002E
- CALLS #2, (R3) ;#2, XFR_STATUS 63 02 FB 00032
- PUSHL #1 ;#1 1730 01 DD 00035
- CALLS #1, G^U.1 ;#1, U.1 00000000V 00 01 FB 00037
- MOVL R0, R2 ;R0, STATUS 52 50 D0 0003E
- MOVZBL #83, -(SP) ;#83, -(SP) 1731 7E 53 8F 9A 00041
- MOVZBL #84, -(SP) ;#84, -(SP) 7E 54 8F 9A 00045
- CALLS #2, (R3) ;#2, XFR_STATUS 63 02 FB 00049
- MOVL R2, R0 ;STATUS, R0 1732 50 52 D0 0004C
- RET ; 04 0004F
-
- ; Routine Size: 80 bytes, Routine Base: $CODE$ + 0199
-
-
- ; 1734 1
- ; 1735 1 %SBTTL 'REC_SWITCH'
- ; 1736 1
- ; 1737 1 GLOBAL ROUTINE REC_SWITCH =
- ; 1738 1
- ; 1739 1 !++
- ; 1740 1 ! FUNCTIONAL DESCRIPTION:
- ; 1741 1 !
- ; 1742 1 ! This routine will cause file(s) to be received by the remote
- ; 1743 1 ! KERMIT. This routine contains the main loop for the sending of the
- ; 1744 1 ! data.
- ; 1745 1 !
- ; 1746 1 ! CALLING SEQUENCE:
- ; 1747 1 !
- ; 1748 1 ! REC_SWITCH();
- ; 1749 1 !
- ; 1750 1 ! INPUT PARAMETERS:
- ; 1751 1 !
- ; 1752 1 ! None.
- ; 1753 1 !
- ; 1754 1 ! IMPLICIT INPUTS:
- ; 1755 1 !
- ; 1756 1 ! FILE_DESC - Descriptor describing the file to be received by
- ; 1757 1 ! the remote KERMIT.
- ; 1758 1 !
- ; 1759 1 ! OUTPUT PARAMETERS:
- ; 1760 1 !
- ; 1761 1 ! None.
- ; 1762 1 !
- ; 1763 1 ! IMPLICIT OUTPUTS:
- ; 1764 1 !
- ; 1765 1 ! None.
- ; 1766 1 !
- ; 1767 1 ! COMPLETION CODES:
- ; 1768 1 !
- ; 1769 1 ! True - File received correctly.
- ; 1770 1 ! FALSE - File transfer aborted.
- ; 1771 1 !
- ; 1772 1 ! SIDE EFFECTS:
- ; 1773 1 !
- ; 1774 1 ! None.
- ; 1775 1 !
- ; 1776 1 !--
- ; 1777 1
- ; 1778 2 BEGIN
- ; 1779 2
- ; 1780 2 LOCAL
- ; 1781 2 INIT_STATE, ! State to start up DO_TRANSACTION in
- ; 1782 2 STATUS; ! Status returned by various routines
- ; 1783 2
- ; 1784 2 INIT_STATE = STATE_R; ! Initialize the state
- ; 1785 2 MSG_NUMBER = 0;
- ; 1786 2 INIT_XFR (); ! Initialize the per transfer info
- ; 1787 2 !
- ; 1788 2 ! Determine if they said REC <file-spec>
- ; 1789 2 ! Send MSG_RCV_INIT and then receive the file
- ; 1790 2 !
- ; 1791 2
- ; 1792 2 IF .FILE_SIZE GTR 0
- ; 1793 2 THEN
- ; 1794 3 BEGIN
- ; 1795 3 GEN_TYPE = MSG_RCV_INIT; ! Use receive-init message
- ; 1796 3 CH$MOVE (.FILE_SIZE, CH$PTR (FILE_NAME), CH$PTR (GEN_1DATA));
- ; 1797 3 GEN_1SIZE = .FILE_SIZE; ! Save the length
- ; 1798 3 INIT_STATE = STATE_SI; ! Start out with server init
- ; 1799 2 END;
- ; 1800 2
- ; 1801 2 !
- ; 1802 2 ! Now receive the file normally
- ; 1803 2 !
- ; 1804 2 XFR_STATUS (%C'I', %C'R'); ! Start of a file receive
- ; 1805 2 STATUS = DO_TRANSACTION (.INIT_STATE);
- ; 1806 2 XFR_STATUS (%C'T', %C'R'); ! End of file receive
- ; 1807 2 RETURN .STATUS; ! Return the result
- ; 1808 1 END; ! End of REC_SWITCH
-
-
-
-
-
- .ENTRY REC_SWITCH, ^M<R2,R3,R4,R5,R6,- ;REC_SWITCH, Save R2,R3,R4,R5,R6,R7,- 1737 01FC 00000
- R7,R8> ;R8
- MOVAB G^XFR_STATUS, R8 ;XFR_STATUS, R8 58 00000000G 00 9E 00002
- MOVL #6, R7 ;#6, INIT_STATE 1784 57 06 D0 00009
- CLRL G^U.55 ;U.55 1785 00000000' 00 D4 0000C
- CALLS #0, G^U.32 ;#0, U.32 1786 00000000V 00 00 FB 00012
- MOVL G^FILE_SIZE, R6 ;FILE_SIZE, R6 1792 56 00000000G 00 D0 00019
- BLEQ 1$ ;1$ 1E 15 00020
- MOVZBL #82, G^U.65 ;#82, U.65 1795 00000000' 00 52 8F 9A 00022
- MOVC3 R6, G^FILE_NAME, G^GEN_1DATA ;R6, FILE_NAME, GEN_1DATA 1796 00000000G 00 56 28 0002A
- ; 00000000G 00 00031
- MOVL R6, G^GEN_1SIZE ;R6, GEN_1SIZE 1797 00000000G 00 56 D0 00036
- MOVL #13, R7 ;#13, INIT_STATE 1798 57 0D D0 0003D
- 1$: MOVZBL #82, -(SP) ;#82, -(SP) 1804 7E 52 8F 9A 00040
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 00044
- CALLS #2, (R8) ;#2, XFR_STATUS 68 02 FB 00048
- PUSHL R7 ;INIT_STATE 1805 57 DD 0004B
- CALLS #1, G^U.1 ;#1, U.1 00000000V 00 01 FB 0004D
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00054
- MOVZBL #82, -(SP) ;#82, -(SP) 1806 7E 52 8F 9A 00057
- MOVZBL #84, -(SP) ;#84, -(SP) 7E 54 8F 9A 0005B
- CALLS #2, (R8) ;#2, XFR_STATUS 68 02 FB 0005F
- MOVL R2, R0 ;STATUS, R0 1807 50 52 D0 00062
- RET ; 04 00065
-
- ; Routine Size: 102 bytes, Routine Base: $CODE$ + 01E9
-
-
- ; 1809 1
- ; 1810 1 %SBTTL 'Server -- DO_GENERIC - Execute a generic command'
- ; 1811 1
- ; 1812 1 GLOBAL ROUTINE DO_GENERIC (TYPE) =
- ; 1813 1
- ; 1814 1 !++
- ; 1815 1 ! FUNCTIONAL DESCRIPTION:
- ; 1816 1 !
- ; 1817 1 ! This routine will send a generic command to the remote Kermit.
- ; 1818 1 ! it will do all the processing required for the generic command
- ; 1819 1 ! that was executed. It will return to the caller after the
- ; 1820 1 ! command has be executed.
- ; 1821 1 !
- ; 1822 1 ! CALLING SEQUENCE:
- ; 1823 1 !
- ; 1824 1 ! STATUS = DO_GENERIC (Command-type);
- ; 1825 1 !
- ; 1826 1 ! INPUT PARAMETERS:
- ; 1827 1 !
- ; 1828 1 ! Command-type -- Command type to be executed.
- ; 1829 1 !
- ; 1830 1 ! IMPLICIT INPUTS:
- ; 1831 1 !
- ; 1832 1 ! None.
- ; 1833 1 !
- ; 1834 1 ! OUTPUT PARAMETERS:
- ; 1835 1 !
- ; 1836 1 ! None.
- ; 1837 1 !
- ; 1838 1 ! IMPLICIT OUTPUTS:
- ; 1839 1 !
- ; 1840 1 ! None.
- ; 1841 1 !
- ; 1842 1 ! COMPLETION CODES:
- ; 1843 1 !
- ; 1844 1 ! None.
- ; 1845 1 !
- ; 1846 1 ! SIDE EFFECTS:
- ; 1847 1 !
- ; 1848 1 ! None.
- ; 1849 1 !
- ; 1850 1 !--
- ; 1851 1
- ; 1852 2 BEGIN
- ; 1853 2
- ; 1854 2 LOCAL
- ; 1855 2 INIT_STATE; ! Initial state for FSM
- ; 1856 2
- ; 1857 2 !
- ; 1858 2 ! Set up the per transfer items
- ; 1859 2 !
- ; 1860 2 INIT_XFR ();
- ; 1861 2 NUM_RETRIES = 0;
- ; 1862 2 MSG_NUMBER = 0;
- ; 1863 2 !
- ; 1864 2 ! These are all generic commands
- ; 1865 2 !
- ; 1866 2 GEN_TYPE = MSG_GENERIC;
- ; 1867 2 !
- ; 1868 2 ! Assume we will not need server init
- ; 1869 2 !
- ; 1870 2 INIT_STATE = STATE_SG;
- ; 1871 2
- ; 1872 2 CASE .TYPE FROM GC_MIN TO GC_MAX OF
- ; 1873 2 SET
- ; 1874 2
- ; 1875 2 [GC_EXIT] :
- ; 1876 2 GEN_SUBTYPE = MSG_GEN_EXIT;
- ; 1877 2
- ; 1878 2 [GC_LOGOUT] :
- ; 1879 2 GEN_SUBTYPE = MSG_GEN_LOGOUT;
- ; 1880 2
- ; 1881 2 [GC_DIRECTORY] :
- ; 1882 3 BEGIN
- ; 1883 3 INIT_STATE = STATE_SI; ! We will need server-init
- ; 1884 3 GEN_SUBTYPE = MSG_GEN_DIRECTORY;
- ; 1885 2 END;
- ; 1886 2
- ; 1887 2 [GC_DISK_USAGE] :
- ; 1888 3 BEGIN
- ; 1889 3 INIT_STATE = STATE_SI; ! We will need server-init
- ; 1890 3 GEN_SUBTYPE = MSG_GEN_DISK_USAGE;
- ; 1891 2 END;
- ; 1892 2
- ; 1893 2 [GC_DELETE] :
- ; 1894 2 GEN_SUBTYPE = MSG_GEN_DELETE;
- ; 1895 2
- ; 1896 2 [GC_TYPE] :
- ; 1897 3 BEGIN
- ; 1898 3 INIT_STATE = STATE_SI; ! We will need server-init
- ; 1899 3 GEN_SUBTYPE = MSG_GEN_TYPE;
- ; 1900 2 END;
- ; 1901 2
- ; 1902 2 [GC_HELP] :
- ; 1903 3 BEGIN
- ; 1904 3 INIT_STATE = STATE_SI; ! We will need server-init
- ; 1905 3 GEN_SUBTYPE = MSG_GEN_HELP;
- ; 1906 2 END;
- ; 1907 2
- ; 1908 2 [GC_LGN] :
- ; 1909 2 GEN_SUBTYPE = MSG_GEN_LOGIN; ! Login just gets ACK
- ; 1910 2
- ; 1911 2 [GC_CONNECT] :
- ; 1912 2 GEN_SUBTYPE = MSG_GEN_CONNECT; ! CWD just gets ACK
- ; 1913 2
- ; 1914 2 [GC_RENAME] :
- ; 1915 2 GEN_SUBTYPE = MSG_GEN_RENAME; ! Rename file just needs ACK
- ; 1916 2
- ; 1917 2 [GC_COPY] :
- ; 1918 2 GEN_SUBTYPE = MSG_GEN_COPY; ! Copy file just needs ACK
- ; 1919 2
- ; 1920 2 [GC_WHO] :
- ; 1921 3 BEGIN
- ; 1922 3 INIT_STATE = STATE_SI; ! May get large response
- ; 1923 3 GEN_SUBTYPE = MSG_GEN_WHO;
- ; 1924 2 END;
- ; 1925 2
- ; 1926 2 [GC_SEND_MSG] :
- ; 1927 2 GEN_SUBTYPE = MSG_GEN_SEND; ! Just need an ACK
- ; 1928 2
- ; 1929 2 [GC_STATUS] :
- ; 1930 3 BEGIN
- ; 1931 3 INIT_STATE = STATE_SI; ! May get large response
- ; 1932 3 GEN_SUBTYPE = MSG_GEN_QUERY;
- ; 1933 2 END;
- ; 1934 2
- ; 1935 2 [GC_COMMAND] :
- ; 1936 3 BEGIN
- ; 1937 3 INIT_STATE = STATE_SI; ! Large response likely
- ; 1938 3 GEN_TYPE = MSG_COMMAND; ! This is host command
- ; 1939 2 END;
- ; 1940 2
- ; 1941 2 [GC_KERMIT] :
- ; 1942 2 GEN_TYPE = MSG_KERMIT; ! Perform Kermit command (short response)
- ; 1943 2
- ; 1944 2 [GC_PROGRAM] :
- ; 1945 3 BEGIN
- ; 1946 3 INIT_STATE = STATE_SI; ! Assume large response
- ; 1947 3 GEN_SUBTYPE = MSG_GEN_PROGRAM; ! Generic program command
- ; 1948 2 END;
- ; 1949 2
- ; 1950 2 [GC_JOURNAL] :
- ; 1951 2 GEN_SUBTYPE = MSG_GEN_JOURNAL; ! Do journal function (short reply)
- ; 1952 2
- ; 1953 2 [GC_VARIABLE] :
- ; 1954 2 GEN_SUBTYPE = MSG_GEN_VARIABLE; ! Set or get a variable value
- ; 1955 2
- ; 1956 2 [INRANGE, OUTRANGE] :
- ; 1957 3 BEGIN
- ; 1958 3 KRM_ERROR (KER_UNIMPLGEN);
- ; 1959 3 RETURN STATE_A;
- ; 1960 2 END;
- ; 1961 2 TES;
- ; 1962 2
- ; 1963 2 RETURN DO_TRANSACTION (.INIT_STATE); ! Go do the command
- ; 1964 1 END; ! End of DO_GENERIC
-
-
-
-
-
- .ENTRY DO_GENERIC, ^M<R2,R3> ;DO_GENERIC, Save R2,R3 1812 000C 00000
- MOVAB G^U.66, R3 ;U.66, R3 53 00000000' 00 9E 00002
- CALLS #0, G^U.32 ;#0, U.32 1860 00000000V 00 00 FB 00009
- CLRQ -2048(R3) ;NUM_RETRIES 1861 F800 C3 7C 00010
- MOVZBL #71, -4(R3) ;#71, GEN_TYPE 1866 FC A3 47 8F 9A 00014
- MOVL #12, R2 ;#12, INIT_STATE 1870 52 0C D0 00019
- CASEL 4(AP), #1, #18 ;TYPE, #1, #18 1872 01 04 AC CF 0001C
- ; 12 00020
- 1$: .WORD 2$-1$,- ;2$-1$,- 0043 0037 00021
- 4$-1$,- ;4$-1$,- 0055 004C 00025
- 5$-1$,- ;5$-1$,- 0064 005B 00029
- 6$-1$,- ;6$-1$,- 006D 003D 0002D
- 7$-1$,- ;7$-1$,- 0079 0073 00031
- 8$-1$,- ;8$-1$,- 0085 007F 00035
- 3$-1$,- ;3$-1$,- 0094 008E 00039
- 9$-1$,- ;9$-1$,- 00A7 009D 0003D
- 10$-1$,- ;10$-1$,- 00BD 00B7 00041
- 11$-1$,- ;11$-1$,- 00AE 00045
- 12$-1$,- ;12$-1$,-
- 13$-1$,- ;13$-1$,-
- 14$-1$,- ;14$-1$,-
- 15$-1$,- ;15$-1$,-
- 16$-1$,- ;16$-1$,-
- 17$-1$,- ;17$-1$,-
- 19$-1$,- ;19$-1$,-
- 21$-1$,- ;21$-1$,-
- 18$-1$ ;18$-1$
- PUSHL #134316210 ;#134316210 1958 080180B2 8F DD 00047
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 0004D
- MOVL #10, R0 ;#10, R0 1959 50 0A D0 00054
- RET ; 04 00057
- 2$: MOVZBL #70, (R3) ;#70, GEN_SUBTYPE 1876 63 46 8F 9A 00058
- BRB 20$ ;20$ 7E 11 0005C
- 3$: MOVZBL #76, (R3) ;#76, GEN_SUBTYPE 1879 63 4C 8F 9A 0005E
- BRB 22$ ;22$ 7E 11 00062
- 4$: MOVL #13, R2 ;#13, INIT_STATE 1883 52 0D D0 00064
- MOVZBL #68, (R3) ;#68, GEN_SUBTYPE 1884 63 44 8F 9A 00067
- BRB 22$ ;22$ 75 11 0006B
- 5$: MOVL #13, R2 ;#13, INIT_STATE 1889 52 0D D0 0006D
- MOVZBL #85, (R3) ;#85, GEN_SUBTYPE 1890 63 55 8F 9A 00070
- BRB 22$ ;22$ 6C 11 00074
- 6$: MOVZBL #69, (R3) ;#69, GEN_SUBTYPE 1894 63 45 8F 9A 00076
- BRB 22$ ;22$ 66 11 0007A
- 7$: MOVL #13, R2 ;#13, INIT_STATE 1898 52 0D D0 0007C
- MOVZBL #84, (R3) ;#84, GEN_SUBTYPE 1899 63 54 8F 9A 0007F
- BRB 22$ ;22$ 5D 11 00083
- 8$: MOVL #13, R2 ;#13, INIT_STATE 1904 52 0D D0 00085
- MOVZBL #72, (R3) ;#72, GEN_SUBTYPE 1905 63 48 8F 9A 00088
- BRB 22$ ;22$ 54 11 0008C
- 9$: MOVZBL #73, (R3) ;#73, GEN_SUBTYPE 1909 63 49 8F 9A 0008E
- BRB 22$ ;22$ 4E 11 00092
- 10$: MOVZBL #67, (R3) ;#67, GEN_SUBTYPE 1912 63 43 8F 9A 00094
- BRB 22$ ;22$ 48 11 00098
- 11$: MOVZBL #82, (R3) ;#82, GEN_SUBTYPE 1915 63 52 8F 9A 0009A
- BRB 22$ ;22$ 42 11 0009E
- 12$: MOVZBL #75, (R3) ;#75, GEN_SUBTYPE 1918 63 4B 8F 9A 000A0
- BRB 22$ ;22$ 3C 11 000A4
- 13$: MOVL #13, R2 ;#13, INIT_STATE 1922 52 0D D0 000A6
- MOVZBL #87, (R3) ;#87, GEN_SUBTYPE 1923 63 57 8F 9A 000A9
- BRB 22$ ;22$ 33 11 000AD
- 14$: MOVZBL #77, (R3) ;#77, GEN_SUBTYPE 1927 63 4D 8F 9A 000AF
- BRB 22$ ;22$ 2D 11 000B3
- 15$: MOVL #13, R2 ;#13, INIT_STATE 1931 52 0D D0 000B5
- MOVZBL #81, (R3) ;#81, GEN_SUBTYPE 1932 63 51 8F 9A 000B8
- BRB 22$ ;22$ 24 11 000BC
- 16$: MOVL #13, R2 ;#13, INIT_STATE 1937 52 0D D0 000BE
- MOVZBL #67, -4(R3) ;#67, GEN_TYPE 1938 FC A3 43 8F 9A 000C1
- BRB 22$ ;22$ 1A 11 000C6
- 17$: MOVZBL #75, -4(R3) ;#75, GEN_TYPE 1942 FC A3 4B 8F 9A 000C8
- BRB 22$ ;22$ 13 11 000CD
- 18$: MOVL #13, R2 ;#13, INIT_STATE 1946 52 0D D0 000CF
- MOVZBL #80, (R3) ;#80, GEN_SUBTYPE 1947 63 50 8F 9A 000D2
- BRB 22$ ;22$ 0A 11 000D6
- 19$: MOVZBL #74, (R3) ;#74, GEN_SUBTYPE 1951 63 4A 8F 9A 000D8
- 20$: BRB 22$ ;22$ 04 11 000DC
- 21$: MOVZBL #86, (R3) ;#86, GEN_SUBTYPE 1954 63 56 8F 9A 000DE
- 22$: PUSHL R2 ;INIT_STATE 1963 52 DD 000E2
- CALLS #1, G^U.1 ;#1, U.1 00000000V 00 01 FB 000E4
- RET ; 04 000EB
-
- ; Routine Size: 236 bytes, Routine Base: $CODE$ + 024F
-
-
- ; 1965 1
- ; 1966 1 %SBTTL 'DO_TRANSACTION - Main loop for FSM'
- ; 1967 1 ROUTINE DO_TRANSACTION (INIT_STATE) =
- ; 1968 1
- ; 1969 1 !++
- ; 1970 1 ! FUNCTIONAL DESCRIPTION:
- ; 1971 1 !
- ; 1972 1 ! This is the main routine for performing a Kermit transaction.
- ; 1973 1 ! It is structured as a finite state machine with each state
- ; 1974 1 ! determining the next based upon the packet which is received.
- ; 1975 1 ! It is supplied with the initial state by the caller.
- ; 1976 1 !
- ; 1977 1 ! CALLING SEQUENCE:
- ; 1978 1 !
- ; 1979 1 ! Status = DO_TRANSACTION(.INIT_STATE);
- ; 1980 1 !
- ; 1981 1 ! INPUT PARAMETERS:
- ; 1982 1 !
- ; 1983 1 ! INIT_STATE - Initial state.
- ; 1984 1 !
- ; 1985 1 ! IMPLICIT INPUTS:
- ; 1986 1 !
- ; 1987 1 ! None.
- ; 1988 1 !
- ; 1989 1 ! OUTPUT PARAMETERS:
- ; 1990 1 !
- ; 1991 1 ! None.
- ; 1992 1 !
- ; 1993 1 ! IMPLICIT OUTPUTS:
- ; 1994 1 !
- ; 1995 1 ! None.
- ; 1996 1 !
- ; 1997 1 ! COMPLETION CODES:
- ; 1998 1 !
- ; 1999 1 ! None.
- ; 2000 1 !
- ; 2001 1 ! SIDE EFFECTS:
- ; 2002 1 !
- ; 2003 1 ! None.
- ; 2004 1 !
- ; 2005 1 !--
- ; 2006 1
- ; 2007 2 BEGIN
- ; 2008 2
- ; 2009 2 LOCAL
- ; 2010 2 RETURN_VALUE;
- ; 2011 2
- ; 2012 2 NUM_RETRIES = 0; ! Initialize the number of retries
- ; 2013 2 STATE = .INIT_STATE; ! Initialize the state
- ; 2014 2
- ; 2015 2 WHILE TRUE DO
- ; 2016 2
- ; 2017 2 CASE .STATE FROM STATE_MIN TO STATE_MAX OF
- ; 2018 2 SET
- ; 2019 2 !
- ; 2020 2 ! Send states
- ; 2021 2 !
- ; 2022 2
- ; 2023 2 [STATE_ID] :
- ; 2024 2 !
- ; 2025 2 ! Server while idle. Set the timeout to twice the normal wait
- ; 2026 2 ! and wait for something to show up
- ; 2027 2 !
- ; 2028 3 BEGIN
- ; 2029 3
- ; 2030 3 LOCAL
- ; 2031 3 SAVED_TIMEOUT;
- ; 2032 3
- ; 2033 3 SAVED_TIMEOUT = .SEND_TIMEOUT;
- ; 2034 3
- ; 2035 3 IF .SEND_TIMEOUT NEQ 0 THEN SEND_TIMEOUT = .SRV_TIMEOUT;
- ; 2036 3
- ; 2037 3 STATE = REC_SERVER_IDLE ();
- ; 2038 3 SEND_TIMEOUT = .SAVED_TIMEOUT;
- ; 2039 2 END;
- ; 2040 2
- ; 2041 2 [STATE_II] :
- ; 2042 2 !
- ; 2043 2 ! Here while server idle after having received a server-init packet
- ; 2044 2 !
- ; 2045 2 STATE = REC_SERVER_IDLE ();
- ; 2046 2
- ; 2047 2 [STATE_FI, STATE_LG] :
- ; 2048 2 !
- ; 2049 2 ! Here when we are supposed to exit
- ; 2050 2 !
- ; 2051 2 RETURN KER_EXIT;
- ; 2052 2
- ; 2053 2 [STATE_SD] :
- ; 2054 2 STATE = SEND_DATA ();
- ; 2055 2
- ; 2056 2 [STATE_SF] :
- ; 2057 2 STATE = SEND_FILE ();
- ; 2058 2
- ; 2059 2 [STATE_SZ] :
- ; 2060 2 STATE = SEND_EOF ();
- ; 2061 2
- ; 2062 2 [STATE_S] :
- ; 2063 2 STATE = SEND_INIT ();
- ; 2064 2
- ; 2065 2 [STATE_OF] :
- ; 2066 2 STATE = SEND_OPEN_FILE ();
- ; 2067 2
- ; 2068 2 [STATE_SI] :
- ; 2069 2 STATE = SEND_SERVER_INIT ();
- ; 2070 2
- ; 2071 2 [STATE_SG] :
- ; 2072 2 STATE = SEND_GENCMD ();
- ; 2073 2
- ; 2074 2 [STATE_SB] :
- ; 2075 2 STATE = SEND_BREAK ();
- ; 2076 2 !
- ; 2077 2 ! Receiving of the data and the end of file message.
- ; 2078 2 !
- ; 2079 2
- ; 2080 2 [STATE_RD] :
- ; 2081 2 STATE = REC_DATA ();
- ; 2082 2 !
- ; 2083 2 ! Receiving the FILE information of the break to end the transfer of
- ; 2084 2 ! one or more files
- ; 2085 2 !
- ; 2086 2
- ; 2087 2 [STATE_RF] :
- ; 2088 2 STATE = REC_FILE ();
- ; 2089 2 !
- ; 2090 2 ! Initialization for the receiving of a file
- ; 2091 2 !
- ; 2092 2
- ; 2093 2 [STATE_R] :
- ; 2094 2 STATE = REC_INIT ();
- ; 2095 2 !
- ; 2096 2 ! Here if we have completed the receiving of the file
- ; 2097 2 !
- ; 2098 2
- ; 2099 2 [STATE_C] :
- ; 2100 3 BEGIN
- ; 2101 3 RETURN_VALUE = TRUE;
- ; 2102 3 EXITLOOP;
- ; 2103 2 END;
- ; 2104 2 !
- ; 2105 2 ! Here if we aborted the transfer or we have gotten into some random
- ; 2106 2 ! state (internal KERMSG problem).
- ; 2107 2 !
- ; 2108 2
- ; 2109 2 [STATE_A, STATE_EX, STATE_ER, INRANGE, OUTRANGE] :
- ; 2110 3 BEGIN
- ; 2111 3 RETURN_VALUE = FALSE;
- ; 2112 3
- ; 2113 3 IF .STATE EQL STATE_EX THEN RETURN_VALUE = KER_ABORTED;
- ; 2114 3
- ; 2115 3 !
- ; 2116 3 ! Determine if the file is still open and if so close it
- ; 2117 3 !
- ; 2118 3
- ; 2119 3 IF .FLAG_FILE_OPEN
- ; 2120 3 THEN
- ; 2121 4 BEGIN
- ; 2122 4 FLAG_FILE_OPEN = FALSE;
- ; 2123 4
- ; 2124 4 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 2125 4 THEN
- ; 2126 5 BEGIN
- ; 2127 5 TT_TEXT (UPLIT (%ASCIZ' [Aborted]'));
- ; 2128 5 TT_CRLF ();
- ; 2129 4 END;
- ; 2130 4
- ; 2131 5 FILE_CLOSE (.ABT_FLAG AND (.STATE EQL STATE_A OR .STATE EQL STATE_EX OR .STATE
- ; 2132 4 EQL STATE_ER));
- ; 2133 4 XFR_STATUS (%C'F', %C'A');
- ; 2134 3 END;
- ; 2135 3
- ; 2136 3 !
- ; 2137 3 ! Give error if aborted due to too many retries
- ; 2138 3 !
- ; 2139 3
- ; 2140 3 IF .STATE EQL STATE_ER THEN KRM_ERROR (KER_RETRIES);
- ; 2141 3
- ; 2142 3 EXITLOOP;
- ; 2143 2 END;
- ; 2144 2 TES;
- ; 2145 2
- ; 2146 2 !
- ; 2147 2 ! End the stats and return to the caller
- ; 2148 2 !
- ; 2149 2 END_STATS ();
- ; 2150 2 !
- ; 2151 2 RETURN .RETURN_VALUE;
- ; 2152 1 END; ! End of DO_TRANSACTION
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAA: .ASCII \ [Aborted]\<0><0> ; 65 74 72 6F 62 41 5B 20 00000
- ; 00 00 5D 64 00008
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;DO_TRANSACTION
- U.1: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 1967 01FC 00000
- MOVAB G^U.10, R8 ;U.10, R8 58 00000000V 00 9E 00002
- MOVAB G^FLAG_FILE_OPEN, R7 ;FLAG_FILE_OPEN, R7 57 00000000' 00 9E 00009
- MOVAB G^SEND_TIMEOUT, R6 ;SEND_TIMEOUT, R6 56 00000000G 00 9E 00010
- MOVAB G^U.51, R5 ;U.51, R5 55 00000000' 00 9E 00017
- CLRL 12(R5) ;NUM_RETRIES 2012 0C A5 D4 0001E
- MOVL 4(AP), (R5) ;INIT_STATE, STATE 2013 65 04 AC D0 00021
- 1$: MOVL (R5), R0 ;STATE, R0 2017 50 65 D0 00025
- CASEL R0, #1, #19 ;R0, #1, #19 01 50 CF 00028
- ; 13 0002B
- 2$: .WORD 18$-2$,- ;18$-2$,- 00E7 00F9 0002C
- 16$-2$,- ;16$-2$,- 00F0 00DE 00030
- 15$-2$,- ;15$-2$,- 0138 011D 00034
- 17$-2$,- ;17$-2$,- 0126 012F 00038
- 22$-2$,- ;22$-2$,- 0028 0145 0003C
- 25$-2$,- ;25$-2$,- 0114 0028 00040
- 24$-2$,- ;24$-2$,- 00B7 010B 00044
- 23$-2$,- ;23$-2$,- 00D6 00D1 00048
- 28$-2$,- ;28$-2$,- 0102 00D6 0004C
- 3$-2$,- ;3$-2$,- 0028 0028 00050
- 3$-2$,- ;3$-2$,-
- 21$-2$,- ;21$-2$,-
- 20$-2$,- ;20$-2$,-
- 11$-2$,- ;11$-2$,-
- 13$-2$,- ;13$-2$,-
- 14$-2$,- ;14$-2$,-
- 14$-2$,- ;14$-2$,-
- 19$-2$,- ;19$-2$,-
- 3$-2$,- ;3$-2$,-
- 3$-2$ ;3$-2$
- 3$: CLRL R3 ;RETURN_VALUE 2111 53 D4 00054
- CMPL R0, #19 ;R0, #19 2113 13 50 D1 00056
- BNEQ 4$ ;4$ 07 12 00059
- MOVL #134316258, R3 ;#134316258, RETURN_VALUE 53 080180E2 8F D0 0005B
- 4$: BLBC (R7), 9$ ;FLAG_FILE_OPEN, 9$ 2119 69 67 E9 00062
- CLRL (R7) ;FLAG_FILE_OPEN 2122 67 D4 00065
- BLBS G^CONNECT_FLAG, 5$ ;CONNECT_FLAG, 5$ 2124 1B 00000000G 00 E8 00067
- BLBC G^TY_FIL, 5$ ;TY_FIL, 5$ 14 00000000G 00 E9 0006E
- PUSHAB G^P.AAA ;P.AAA 2127 00000000' 00 9F 00075
- CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 0007B
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 2128 00000000G 00 00 FB 00082
- 5$: MOVL (R5), R2 ;STATE, R2 2131 52 65 D0 00089
- CLRL R0 ;R0 50 D4 0008C
- CMPL R2, #10 ;R2, #10 0A 52 D1 0008E
- BNEQ 6$ ;6$ 02 12 00091
- INCL R0 ;R0 50 D6 00093
- 6$: CLRL R1 ;R1 51 D4 00095
- CMPL R2, #19 ;R2, #19 13 52 D1 00097
- BNEQ 7$ ;7$ 02 12 0009A
- INCL R1 ;R1 51 D6 0009C
- 7$: BISL2 R0, R1 ;R0, R1 51 50 C8 0009E
- CLRL R0 ;R0 2132 50 D4 000A1
- CMPL R2, #20 ;R2, #20 14 52 D1 000A3
- BNEQ 8$ ;8$ 02 12 000A6
- INCL R0 ;R0 50 D6 000A8
- 8$: BISL2 R1, R0 ;R1, R0 50 51 C8 000AA
- MCOML G^ABT_FLAG, R4 ;ABT_FLAG, R4 54 00000000G 00 D2 000AD
- BICL3 R4, R0, -(SP) ;R4, R0, -(SP) 50 54 CB 000B4
- ; 7E 000B7
- CALLS #1, G^FILE_CLOSE ;#1, FILE_CLOSE 00000000G 00 01 FB 000B8
- MOVZBL #65, -(SP) ;#65, -(SP) 2133 7E 41 8F 9A 000BF
- MOVZBL #70, -(SP) ;#70, -(SP) 7E 46 8F 9A 000C3
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 000C7
- 9$: CMPL (R5), #20 ;STATE, #20 2140 14 65 D1 000CE
- BNEQ 10$ ;10$ 0D 12 000D1
- PUSHL #134316194 ;#134316194 080180A2 8F DD 000D3
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 000D9
- 10$: BRW 29$ ;29$ 2142 0091 31 000E0
- 11$: MOVL (R6), R0 ;SEND_TIMEOUT, R0 2033 50 66 D0 000E3
- MOVL R0, R2 ;R0, SAVED_TIMEOUT 52 50 D0 000E6
- BEQL 12$ ;12$ 2035 07 13 000E9
- MOVL G^SRV_TIMEOUT, (R6) ;SRV_TIMEOUT, SEND_TIMEOUT 66 00000000G 00 D0 000EB
- 12$: CALLS #0, (R8) ;#0, REC_SERVER_IDLE 2037 68 00 FB 000F2
- MOVL R0, (R5) ;R0, STATE 65 50 D0 000F5
- MOVL R2, (R6) ;SAVED_TIMEOUT, SEND_TIMEOUT 2038 66 52 D0 000F8
- BRB 27$ ;27$ 71 11 000FB
- 13$: CALLS #0, (R8) ;#0, REC_SERVER_IDLE 2045 68 00 FB 000FD
- BRB 26$ ;26$ 69 11 00100
- 14$: MOVL #134316203, R0 ;#134316203, R0 2051 50 080180AB 8F D0 00102
- RET ; 04 00109
- 15$: CALLS #0, G^U.3 ;#0, U.3 2054 00000000V 00 00 FB 0010A
- BRB 26$ ;26$ 58 11 00111
- 16$: CALLS #0, G^U.4 ;#0, U.4 2057 00000000V 00 00 FB 00113
- BRB 26$ ;26$ 4F 11 0011A
- 17$: CALLS #0, G^U.7 ;#0, U.7 2060 00000000V 00 00 FB 0011C
- BRB 26$ ;26$ 46 11 00123
- 18$: CALLS #0, G^U.8 ;#0, U.8 2063 00000000V 00 00 FB 00125
- BRB 26$ ;26$ 3D 11 0012C
- 19$: CALLS #0, G^U.5 ;#0, U.5 2066 00000000V 00 00 FB 0012E
- BRB 26$ ;26$ 34 11 00135
- 20$: CALLS #0, G^U.2 ;#0, U.2 2069 00000000V 00 00 FB 00137
- BRB 26$ ;26$ 2B 11 0013E
- 21$: CALLS #0, G^U.6 ;#0, U.6 2072 00000000V 00 00 FB 00140
- BRB 26$ ;26$ 22 11 00147
- 22$: CALLS #0, G^U.9 ;#0, U.9 2075 00000000V 00 00 FB 00149
- BRB 26$ ;26$ 19 11 00150
- 23$: CALLS #0, G^U.13 ;#0, U.13 2081 00000000V 00 00 FB 00152
- BRB 26$ ;26$ 10 11 00159
- 24$: CALLS #0, G^U.12 ;#0, U.12 2088 00000000V 00 00 FB 0015B
- BRB 26$ ;26$ 07 11 00162
- 25$: CALLS #0, G^U.11 ;#0, U.11 2094 00000000V 00 00 FB 00164
- 26$: MOVL R0, (R5) ;R0, STATE 65 50 D0 0016B
- 27$: BRW 1$ ;1$ FEB4 31 0016E
- 28$: MOVL #1, R3 ;#1, RETURN_VALUE 2101 53 01 D0 00171
- 29$: CALLS #0, G^U.18 ;#0, U.18 2149 00000000V 00 00 FB 00174
- MOVL R3, R0 ;RETURN_VALUE, R0 2151 50 53 D0 0017B
- RET ; 04 0017E
-
- ; Routine Size: 383 bytes, Routine Base: $CODE$ + 033B
-
-
- ; 2153 1 %SBTTL 'REC_SERVER_IDLE - Idle server state'
- ; 2154 1 ROUTINE REC_SERVER_IDLE =
- ; 2155 1
- ; 2156 1 !++
- ; 2157 1 ! FUNCTIONAL DESCRIPTION:
- ; 2158 1 !
- ; 2159 1 ! This routine is called from DO_TRANSACTION when is the server idle
- ; 2160 1 ! state. It will receive a message and properly dispatch to the new
- ; 2161 1 ! state.
- ; 2162 1 !
- ; 2163 1 ! CALLING SEQUENCE:
- ; 2164 1 !
- ; 2165 1 ! STATE = REC_SERVER_IDLE ();
- ; 2166 1 !
- ; 2167 1 ! INPUT PARAMETERS:
- ; 2168 1 !
- ; 2169 1 ! None.
- ; 2170 1 !
- ; 2171 1 ! IMPLICIT INPUTS:
- ; 2172 1 !
- ; 2173 1 ! Almost everything.
- ; 2174 1 !
- ; 2175 1 ! OUPTUT PARAMETERS:
- ; 2176 1 !
- ; 2177 1 ! Routine value is new state for FSM
- ; 2178 1 !
- ; 2179 1 ! IMPLICIT OUTPUTS:
- ; 2180 1 !
- ; 2181 1 ! None.
- ; 2182 1 !
- ; 2183 1 ! COMPLETION CODES:
- ; 2184 1 !
- ; 2185 1 ! None.
- ; 2186 1 !
- ; 2187 1 ! SIDE EFFECTS:
- ; 2188 1 !
- ; 2189 1 ! None.
- ; 2190 1 !
- ; 2191 1 !--
- ; 2192 1
- ; 2193 2 BEGIN
- ; 2194 2
- ; 2195 2 LOCAL
- ; 2196 2 STATUS;
- ; 2197 2
- ; 2198 2 STATUS = REC_PACKET ();
- ; 2199 2 !
- ; 2200 2 ! Now determine what to do by the type of message we have receive.
- ; 2201 2 !
- ; 2202 2
- ; 2203 2 IF .STATUS EQL KER_ABORTED THEN RETURN STATE_EX;
- ; 2204 2
- ; 2205 2 IF .STATUS
- ; 2206 2 THEN
- ; 2207 3 BEGIN
- ; 2208 3
- ; 2209 3 SELECTONE .REC_TYPE OF
- ; 2210 3 SET
- ; 2211 3 !
- ; 2212 3 ! Server initialization message received. ACK the
- ; 2213 3 ! message and continue.
- ; 2214 3 !
- ; 2215 3
- ; 2216 3 [MSG_SER_INIT] :
- ; 2217 4 BEGIN
- ; 2218 4
- ; 2219 5 IF (STATUS = PRS_SEND_INIT ())
- ; 2220 4 THEN
- ; 2221 5 BEGIN
- ; 2222 5 SET_SEND_INIT ();
- ; 2223 5
- ; 2224 6 IF (STATUS = SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .REC_SEQ)) ! [108]
- ; 2225 5 THEN
- ; 2226 6 BEGIN
- ; 2227 6 SND_PKT_SIZE = -.SEND_PKT_SIZE;
- ; 2228 6 SND_TIMEOUT = -.SEND_TIMEOUT;
- ; 2229 6 SND_NPAD = -.SEND_NPAD;
- ; 2230 6 SND_PADCHAR = -.SEND_PADCHAR;
- ; 2231 6 SND_EOL = -.SEND_EOL;
- ; 2232 6 SND_QUOTE_CHR = -.SEND_QUOTE_CHR;
- ; 2233 6 RCV_8QUOTE_CHR = .SEND_8QUOTE_CHR;
- ; 2234 6 CHKTYPE = .INI_CHK_TYPE;
- ; 2235 6 SET_REPT_CHR = .REPT_CHR;
- ; 2236 6 RETURN STATE_II; ! Now idle after INIT
- ; 2237 5 END;
- ; 2238 5
- ; 2239 4 END;
- ; 2240 4
- ; 2241 4 KRM_ERROR (KER_PROTOERR);
- ; 2242 4 RETURN STATE_A;
- ; 2243 3 END;
- ; 2244 3 !
- ; 2245 3 ! Send init message received. We must ACK the message and
- ; 2246 3 ! then attempt to receive a file from the remote.
- ; 2247 3 !
- ; 2248 3
- ; 2249 3 [MSG_SND_INIT] :
- ; 2250 4 BEGIN
- ; 2251 4 MSG_NUMBER = (.REC_SEQ + 1) AND %O'77';
- ; 2252 4
- ; 2253 5 IF (STATUS = PRS_SEND_INIT ())
- ; 2254 4 THEN
- ; 2255 5 BEGIN
- ; 2256 5 SET_SEND_INIT ();
- ; 2257 5 !
- ; 2258 5 ! ACK the message then receive everything.
- ; 2259 5 !
- ; 2260 5
- ; 2261 5 IF SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .REC_SEQ) ! [108]
- ; 2262 5 THEN
- ; 2263 6 BEGIN
- ; 2264 6 BLK_CHK_TYPE = .INI_CHK_TYPE; ! Switch to desired form of block check
- ; 2265 6 XFR_STATUS (%C'I', %C'R'); ! Start of file receive
- ; 2266 6 RETURN STATE_RF;
- ; 2267 5 END;
- ; 2268 5
- ; 2269 4 END;
- ; 2270 4
- ; 2271 4 KRM_ERROR (KER_PROTOERR);
- ; 2272 4 RETURN STATE_A;
- ; 2273 3 END;
- ; 2274 3 !
- ; 2275 3 ! Here if we receive a receive init message.
- ; 2276 3 ! We will be sending a file to the other end.
- ; 2277 3 !
- ; 2278 3
- ; 2279 3 [MSG_RCV_INIT] :
- ; 2280 4 BEGIN
- ; 2281 4 !
- ; 2282 4 ! Move the file specification if we received one
- ; 2283 4 !
- ; 2284 4 SET_STRING (CH$PTR (FILE_NAME), MAX_FILE_NAME, TRUE);
- ; 2285 4 BFR_EMPTY ();
- ; 2286 4 FILE_SIZE = SET_STRING (0, 0, FALSE);
- ; 2287 4 CH$WCHAR (CHR_NUL, CH$PTR (FILE_NAME, .FILE_SIZE));
- ; 2288 4
- ; 2289 4 IF .FILE_SIZE GTR 0
- ; 2290 4 THEN
- ; 2291 5 BEGIN
- ; 2292 5 XFR_STATUS (%C'I', %C'S'); ! Start of a file send
- ; 2293 5 RETURN STATE_S;
- ; 2294 4 END;
- ; 2295 4
- ; 2296 4 KRM_ERROR (KER_PROTOERR);
- ; 2297 4 RETURN STATE_A;
- ; 2298 3 END;
- ; 2299 3 !
- ; 2300 3 ! Generic KERMIT commands
- ; 2301 3 !
- ; 2302 3
- ; 2303 3 [MSG_GENERIC] :
- ; 2304 3 RETURN SERVER_GENERIC ();
- ; 2305 3 !
- ; 2306 3 ! Host command
- ; 2307 3 !
- ; 2308 3
- ; 2309 3 [MSG_COMMAND] :
- ; 2310 3 RETURN HOST_COMMAND ();
- ; 2311 3 !
- ; 2312 3 ! Kermit command
- ; 2313 3 !
- ; 2314 3
- ; 2315 3 [MSG_KERMIT] :
- ; 2316 3 RETURN KERMIT_COMMAND ();
- ; 2317 3 !
- ; 2318 3 ! Unimplimented server routines
- ; 2319 3 !
- ; 2320 3
- ; 2321 3 [OTHERWISE] :
- ; 2322 4 BEGIN
- ; 2323 4 KRM_ERROR (KER_UNISRV);
- ; 2324 4 RETURN STATE_A;
- ; 2325 3 END;
- ; 2326 3 TES;
- ; 2327 3
- ; 2328 2 END;
- ; 2329 2
- ; 2330 2 !
- ; 2331 2 ! If we get here, we must have gotten something random. Therefore,
- ; 2332 2 ! just send a NAK and remain in the current state (unless we have done this
- ; 2333 2 ! too many times).
- ; 2334 2 !
- ; 2335 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 2336 2
- ; 2337 2 IF .NUM_RETRIES GTR .SI_RETRIES THEN RETURN STATE_A;
- ; 2338 2
- ; 2339 2 IF SEND_PACKET (MSG_NAK, 0, 0) THEN RETURN .STATE ELSE RETURN STATE_EX;
- ; 2340 2
- ; 2341 1 END; ! End of REC_SERVER_IDLE
-
-
-
-
-
- ;REC_SERVER_IDLE
- U.10: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10> ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10 2154 07FC 00000
- MOVAB G^U.30, R10 ;U.30, R10 5A 00000000V 00 9E 00002
- MOVAB G^FILE_NAME, R9 ;FILE_NAME, R9 59 00000000G 00 9E 00009
- MOVAB G^XFR_STATUS, R8 ;XFR_STATUS, R8 58 00000000G 00 9E 00010
- MOVAB G^U.20, R7 ;U.20, R7 57 00000000V 00 9E 00017
- MOVAB G^U.21, R6 ;U.21, R6 56 00000000V 00 9E 0001E
- MOVAB G^U.24, R5 ;U.24, R5 55 00000000V 00 9E 00025
- MOVAB G^U.56, R4 ;U.56, R4 54 00000000' 00 9E 0002C
- CALLS #0, G^U.26 ;#0, U.26 2198 00000000V 00 00 FB 00033
- MOVL R0, R3 ;R0, STATUS 53 50 D0 0003A
- CMPL R3, #134316258 ;STATUS, #134316258 2203 080180E2 8F 53 D1 0003D
- BNEQ 1$ ;1$ 03 12 00044
- BRW 15$ ;15$ 016D 31 00046
- 1$: BLBS R3, 2$ ;STATUS, 2$ 2205 03 53 E8 00049
- BRW 12$ ;12$ 0145 31 0004C
- 2$: MOVL 8(R4), R2 ;REC_TYPE, R2 2209 52 08 A4 D0 0004F
- CMPL R2, #73 ;R2, #73 2216 00000049 8F 52 D1 00053
- BNEQ 3$ ;3$ 6D 12 0005A
- CALLS #0, (R6) ;#0, PRS_SEND_INIT 2219 66 00 FB 0005C
- MOVL R0, R3 ;R0, STATUS 53 50 D0 0005F
- BLBC R3, 4$ ;STATUS, 4$ 7D 53 E9 00062
- CALLS #0, (R7) ;#0, SET_SEND_INIT 2222 67 00 FB 00065
- PUSHL (R4) ;REC_SEQ 2224 64 DD 00068
- PUSHL -40(R4) ;SEND_INIT_SIZE D8 A4 DD 0006A
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 0006D
- CALLS #3, (R5) ;#3, SEND_PACKET 65 03 FB 00071
- MOVL R0, R3 ;R0, STATUS 53 50 D0 00074
- BLBC R3, 4$ ;STATUS, 4$ 68 53 E9 00077
- MNEGL -64(R4), G^SND_PKT_SIZE ;SEND_PKT_SIZE, SND_PKT_SIZE 2227 00000000G 00 C0 A4 CE 0007A
- MNEGL G^SEND_TIMEOUT, G^SND_TIMEOUT ;SEND_TIMEOUT, SND_TIMEOUT 2228 00000000G 00 00000000G 00 CE 00082
- MNEGL -60(R4), G^SND_NPAD ;SEND_NPAD, SND_NPAD 2229 00000000G 00 C4 A4 CE 0008D
- MNEGL -56(R4), G^SND_PADCHAR ;SEND_PADCHAR, SND_PADCHAR 2230 00000000G 00 C8 A4 CE 00095
- MNEGL -52(R4), G^SND_EOL ;SEND_EOL, SND_EOL 2231 00000000G 00 CC A4 CE 0009D
- MNEGL -48(R4), G^SND_QUOTE_CHR ;SEND_QUOTE_CHR, SND_QUOTE_CHR 2232 00000000G 00 D0 A4 CE 000A5
- MOVL -44(R4), G^RCV_8QUOTE_CHR ;SEND_8QUOTE_CHR, RCV_8QUOTE_CHR 2233 00000000G 00 D4 A4 D0 000AD
- MOVL -36(R4), G^CHKTYPE ;INI_CHK_TYPE, CHKTYPE 2234 00000000G 00 DC A4 D0 000B5
- MOVL -72(R4), G^SET_REPT_CHR ;REPT_CHR, SET_REPT_CHR 2235 00000000G 00 B8 A4 D0 000BD
- MOVL #15, R0 ;#15, R0 2236 50 0F D0 000C5
- RET ; 04 000C8
- 3$: CMPL R2, #83 ;R2, #83 2249 00000053 8F 52 D1 000C9
- BNEQ 5$ ;5$ 39 12 000D0
- ADDL3 #1, (R4), R0 ;#1, REC_SEQ, R0 2251 64 01 C1 000D2
- ; 50 000D5
- EXTZV #0, #6, R0, -4(R4) ;#0, #6, R0, MSG_NUMBER 06 00 EF 000D6
- ; FC A4 50 000D9
- CALLS #0, (R6) ;#0, PRS_SEND_INIT 2253 66 00 FB 000DC
- MOVL R0, R3 ;R0, STATUS 53 50 D0 000DF
- 4$: BLBC R3, 6$ ;STATUS, 6$ 65 53 E9 000E2
- CALLS #0, (R7) ;#0, SET_SEND_INIT 2256 67 00 FB 000E5
- PUSHL (R4) ;REC_SEQ 2261 64 DD 000E8
- PUSHL -40(R4) ;SEND_INIT_SIZE D8 A4 DD 000EA
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 000ED
- CALLS #3, (R5) ;#3, SEND_PACKET 65 03 FB 000F1
- BLBC R0, 6$ ;R0, 6$ 53 50 E9 000F4
- MOVL -36(R4), -32(R4) ;INI_CHK_TYPE, BLK_CHK_TYPE 2264 E0 A4 DC A4 D0 000F7
- MOVZBL #82, -(SP) ;#82, -(SP) 2265 7E 52 8F 9A 000FC
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 00100
- CALLS #2, (R8) ;#2, XFR_STATUS 68 02 FB 00104
- MOVL #7, R0 ;#7, R0 2266 50 07 D0 00107
- RET ; 04 0010A
- 5$: CMPL R2, #82 ;R2, #82 2279 00000052 8F 52 D1 0010B
- BNEQ 8$ ;8$ 45 12 00112
- PUSHL #1 ;#1 2284 01 DD 00114
- MOVZBL #132, -(SP) ;#132, -(SP) 7E 84 8F 9A 00116
- PUSHL R9 ;R9 59 DD 0011A
- CALLS #3, (R10) ;#3, SET_STRING 6A 03 FB 0011C
- CALLS #0, G^U.28 ;#0, U.28 2285 00000000V 00 00 FB 0011F
- CLRQ -(SP) ;-(SP) 2286 7E 7C 00126
- CLRL -(SP) ;-(SP) 7E D4 00128
- CALLS #3, (R10) ;#3, SET_STRING 6A 03 FB 0012A
- MOVL R0, G^FILE_SIZE ;R0, FILE_SIZE 00000000G 00 50 D0 0012D
- CLRB (R9)[R0] ;FILE_NAME[R0] 2287 6940 94 00134
- TSTL R0 ;R0 2289 50 D5 00137
- BLEQ 6$ ;6$ 0F 15 00139
- MOVZBL #83, -(SP) ;#83, -(SP) 2292 7E 53 8F 9A 0013B
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 0013F
- CALLS #2, (R8) ;#2, XFR_STATUS 68 02 FB 00143
- MOVL #1, R0 ;#1, R0 2293 50 01 D0 00146
- RET ; 04 00149
- 6$: PUSHL #134316226 ;#134316226 2296 080180C2 8F DD 0014A
- 7$: CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 00150
- BRB 13$ ;13$ 2297 48 11 00157
- 8$: CMPL R2, #71 ;R2, #71 2303 00000047 8F 52 D1 00159
- BNEQ 9$ ;9$ 08 12 00160
- CALLS #0, G^U.14 ;#0, U.14 2304 00000000V 00 00 FB 00162
- RET ; 04 00169
- 9$: CMPL R2, #67 ;R2, #67 2309 00000043 8F 52 D1 0016A
- BNEQ 10$ ;10$ 08 12 00171
- CALLS #0, G^U.15 ;#0, U.15 2310 00000000V 00 00 FB 00173
- RET ; 04 0017A
- 10$: CMPL R2, #75 ;R2, #75 2315 0000004B 8F 52 D1 0017B
- BNEQ 11$ ;11$ 08 12 00182
- CALLS #0, G^U.16 ;#0, U.16 2316 00000000V 00 00 FB 00184
- RET ; 04 0018B
- 11$: PUSHL #134316218 ;#134316218 2323 080180BA 8F DD 0018C
- BRB 7$ ;7$ BC 11 00192
- 12$: INCL -8(R4) ;NUM_RETRIES 2335 F8 A4 D6 00194
- CMPL -8(R4), G^SI_RETRIES ;NUM_RETRIES, SI_RETRIES 2337 00000000G 00 F8 A4 D1 00197
- BLEQ 14$ ;14$ 04 15 0019F
- 13$: MOVL #10, R0 ;#10, R0 50 0A D0 001A1
- RET ; 04 001A4
- 14$: CLRQ -(SP) ;-(SP) 2339 7E 7C 001A5
- MOVZBL #78, -(SP) ;#78, -(SP) 7E 4E 8F 9A 001A7
- CALLS #3, (R5) ;#3, SEND_PACKET 65 03 FB 001AB
- BLBC R0, 15$ ;R0, 15$ 05 50 E9 001AE
- MOVL -20(R4), R0 ;STATE, R0 50 EC A4 D0 001B1
- RET ; 04 001B5
- 15$: MOVL #19, R0 ;#19, R0 50 13 D0 001B6
- RET ; 04 001B9
-
- ; Routine Size: 442 bytes, Routine Base: $CODE$ + 04BA
-
-
- ; 2342 1 %SBTTL 'SEND_SERVER_INIT'
- ; 2343 1 ROUTINE SEND_SERVER_INIT =
- ; 2344 1
- ; 2345 1 !++
- ; 2346 1 ! FUNCTIONAL DESCRIPTION:
- ; 2347 1 !
- ; 2348 1 ! This routine will send a server initialization message to the
- ; 2349 1 ! remote KERMIT.
- ; 2350 1 !
- ; 2351 1 ! CALLING SEQUENCE:
- ; 2352 1 !
- ; 2353 1 ! STATE = SEND_SERVER_INIT();
- ; 2354 1 !
- ; 2355 1 ! INPUT PARAMETERS:
- ; 2356 1 !
- ; 2357 1 ! None.
- ; 2358 1 !
- ; 2359 1 ! IMPLICIT INPUTS:
- ; 2360 1 !
- ; 2361 1 ! RECV_xxx - desired receive parameters
- ; 2362 1 !
- ; 2363 1 ! OUTPUT PARAMETERS:
- ; 2364 1 !
- ; 2365 1 ! New state to change the finite state machine to.
- ; 2366 1 !
- ; 2367 1 ! IMPLICIT OUTPUTS:
- ; 2368 1 !
- ; 2369 1 ! SEND_xxx - Other Kermit's desired parameters
- ; 2370 1 !
- ; 2371 1 ! COMPLETION CODES:
- ; 2372 1 !
- ; 2373 1 ! None.
- ; 2374 1 !
- ; 2375 1 ! SIDE EFFECTS:
- ; 2376 1 !
- ; 2377 1 ! None.
- ; 2378 1 !
- ; 2379 1 !--
- ; 2380 1
- ; 2381 2 BEGIN
- ; 2382 2
- ; 2383 2 LOCAL
- ; 2384 2 OLD_OUTPUT, ! Saved terminal output routine
- ; 2385 2 STATUS; ! Status returned by various routines
- ; 2386 2
- ; 2387 2 ![026] Local routine to ignore error message output
- ; 2388 2 ROUTINE IGNORE_ERROR (ADDRESS, LENGTH) =
- ; 2389 3 BEGIN
- ; 2390 3 RETURN TRUE;
- ; 2391 2 END;
-
-
-
-
-
- ;IGNORE_ERROR
- U.76: .WORD ^M<> ;Save nothing 2388 0000 00000
- MOVL #1, R0 ;#1, R0 2390 50 01 D0 00002
- RET ; 04 00005
-
- ; Routine Size: 6 bytes, Routine Base: $CODE$ + 0674
-
-
- ; 2392 2 SET_SEND_INIT ();
- ; 2393 2 ![026] If too many tries, just give up. Maybe the other Kermit doesn't
- ; 2394 2 ![026] know what to do with this packet.
- ; 2395 2
- ; 2396 2 IF .NUM_RETRIES GTR .SI_RETRIES THEN RETURN STATE_SG;
- ; 2397 2
- ; 2398 2 ![026]
- ; 2399 2 ![026] Count the number of times we try this
- ; 2400 2 ![026]
- ; 2401 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 2402 2
- ; 2403 2 IF NOT SEND_PACKET (MSG_SER_INIT, .SEND_INIT_SIZE, .MSG_NUMBER) THEN RETURN STATE_A; ! [108]
- ; 2404 2
- ; 2405 2 ![026]
- ; 2406 2 ![026] Determine if we received a packet it good condition. If we timed out
- ; 2407 2 ![026] just try again. If we get an error packet back, ignore it and
- ; 2408 2 ![026] just continue. The other Kermit must not support this packet.
- ; 2409 2 ![026]
- ; 2410 2 OLD_OUTPUT = TT_SET_OUTPUT (IGNORE_ERROR);
- ; 2411 2 STATUS = REC_PACKET ();
- ; 2412 2 TT_OUTPUT ();
- ; 2413 2 TT_SET_OUTPUT (.OLD_OUTPUT);
- ; 2414 2
- ; 2415 2 IF .STATUS EQL KER_ERRMSG THEN RETURN STATE_SG;
- ; 2416 2
- ; 2417 2 IF NOT .STATUS
- ; 2418 2 THEN
- ; 2419 2
- ; 2420 4 IF NOT ((.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL
- ; 2421 3 KER_CHKSUMERR))
- ; 2422 2 THEN
- ; 2423 2 RETURN STATE_EX
- ; 2424 2 ELSE
- ; 2425 2 RETURN .STATE;
- ; 2426 2
- ; 2427 2 !
- ; 2428 2 ! Determine if the packet is good.
- ; 2429 2 !
- ; 2430 2
- ; 2431 2 IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ EQL .MSG_NUMBER
- ; 2432 2 THEN
- ; 2433 3 BEGIN
- ; 2434 3 !
- ; 2435 3 ! Here if we have an ACK for the initialization message that was just sent
- ; 2436 3 ! to the remote KERMIT.
- ; 2437 3 !
- ; 2438 3
- ; 2439 3 IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN STATE_A;
- ; 2440 3
- ; 2441 3 NUM_RETRIES = 0;
- ; 2442 3 INIT_PKT_SENT = TRUE; ! We have exchanged init's
- ; 2443 3 RETURN STATE_SG;
- ; 2444 2 END;
- ; 2445 2
- ; 2446 2 !
- ; 2447 2 ! If we haven't returned yet, we must have gotten an invalid response.
- ; 2448 2 ! Just stay in the same state so we try again
- ; 2449 2 !
- ; 2450 2 RETURN .STATE;
- ; 2451 1 END;
-
-
-
-
-
- ;SEND_SERVER_INIT
- U.2: .WORD ^M<R2,R3,R4,R5> ;Save R2,R3,R4,R5 2343 003C 00000
- MOVAB G^TT_SET_OUTPUT, R5 ;TT_SET_OUTPUT, R5 55 00000000G 00 9E 00002
- MOVAB G^U.54, R4 ;U.54, R4 54 00000000' 00 9E 00009
- CALLS #0, G^U.20 ;#0, U.20 2392 00000000V 00 00 FB 00010
- CMPL (R4), G^SI_RETRIES ;NUM_RETRIES, SI_RETRIES 2396 00000000G 00 64 D1 00017
- BLEQ 1$ ;1$ 03 15 0001E
- BRW 5$ ;5$ 0089 31 00020
- 1$: INCL (R4) ;NUM_RETRIES 2401 64 D6 00023
- PUSHL 4(R4) ;MSG_NUMBER 2403 04 A4 DD 00025
- PUSHL -32(R4) ;SEND_INIT_SIZE E0 A4 DD 00028
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 0002B
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 0002F
- BLBC R0, 3$ ;R0, 3$ 68 50 E9 00036
- PUSHAB B^U.76 ;U.76 2410 BE AF 9F 00039
- CALLS #1, (R5) ;#1, TT_SET_OUTPUT 65 01 FB 0003C
- MOVL R0, R3 ;R0, OLD_OUTPUT 53 50 D0 0003F
- CALLS #0, G^U.26 ;#0, U.26 2411 00000000V 00 00 FB 00042
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00049
- CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 2412 00000000G 00 00 FB 0004C
- PUSHL R3 ;OLD_OUTPUT 2413 53 DD 00053
- CALLS #1, (R5) ;#1, TT_SET_OUTPUT 65 01 FB 00055
- CMPL R2, #134316170 ;STATUS, #134316170 2415 0801808A 8F 52 D1 00058
- BEQL 5$ ;5$ 4B 13 0005F
- BLBS R2, 2$ ;STATUS, 2$ 2417 1F 52 E8 00061
- CMPL R2, #134316234 ;STATUS, #134316234 2420 080180CA 8F 52 D1 00064
- BEQL 6$ ;6$ 43 13 0006B
- CMPL R2, #134316248 ;STATUS, #134316248 080180D8 8F 52 D1 0006D
- BEQL 6$ ;6$ 3A 13 00074
- CMPL R2, #134316178 ;STATUS, #134316178 2421 08018092 8F 52 D1 00076
- BEQL 6$ ;6$ 31 13 0007D
- MOVL #19, R0 ;#19, R0 2423 50 13 D0 0007F
- RET ; 04 00082
- 2$: CMPL 16(R4), #89 ;REC_TYPE, #89 2431 00000059 8F 10 A4 D1 00083
- BNEQ 6$ ;6$ 23 12 0008B
- CMPL 8(R4), 4(R4) ;REC_SEQ, MSG_NUMBER 04 A4 08 A4 D1 0008D
- BNEQ 6$ ;6$ 1C 12 00092
- CALLS #0, G^U.21 ;#0, U.21 2439 00000000V 00 00 FB 00094
- MOVL R0, R2 ;R0, STATUS 52 50 D0 0009B
- BLBS R2, 4$ ;STATUS, 4$ 04 52 E8 0009E
- 3$: MOVL #10, R0 ;#10, R0 50 0A D0 000A1
- RET ; 04 000A4
- 4$: CLRL (R4) ;NUM_RETRIES 2441 64 D4 000A5
- MOVL #1, 2040(R4) ;#1, INIT_PKT_SENT 2442 07F8 C4 01 D0 000A7
- 5$: MOVL #12, R0 ;#12, R0 2443 50 0C D0 000AC
- RET ; 04 000AF
- 6$: MOVL -12(R4), R0 ;STATE, R0 2450 50 F4 A4 D0 000B0
- RET ; 04 000B4
-
- ; Routine Size: 181 bytes, Routine Base: $CODE$ + 067A
-
-
- ; 2452 1 %SBTTL 'SEND_DATA'
- ; 2453 1 ROUTINE SEND_DATA =
- ; 2454 1
- ; 2455 1 !++
- ; 2456 1 ! FUNCTIONAL DESCRIPTION:
- ; 2457 1 !
- ; 2458 1 ! This routine will send a data message to the remote KERMIT.
- ; 2459 1 !
- ; 2460 1 ! CALLING SEQUENCE:
- ; 2461 1 !
- ; 2462 1 ! STATE = SEND_DATA();
- ; 2463 1 !
- ; 2464 1 ! INPUT PARAMETERS:
- ; 2465 1 !
- ; 2466 1 ! None.
- ; 2467 1 !
- ; 2468 1 ! IMPLICIT INPUTS:
- ; 2469 1 !
- ; 2470 1 ! None.
- ; 2471 1 !
- ; 2472 1 ! OUTPUT PARAMETERS:
- ; 2473 1 !
- ; 2474 1 ! New state to change the finite state machine to.
- ; 2475 1 !
- ; 2476 1 ! IMPLICIT OUTPUTS:
- ; 2477 1 !
- ; 2478 1 ! None.
- ; 2479 1 !
- ; 2480 1 ! COMPLETION CODES:
- ; 2481 1 !
- ; 2482 1 ! None.
- ; 2483 1 !
- ; 2484 1 ! SIDE EFFECTS:
- ; 2485 1 !
- ; 2486 1 ! None.
- ; 2487 1 !
- ; 2488 1 !--
- ; 2489 1
- ; 2490 2 BEGIN
- ; 2491 2
- ; 2492 2 LOCAL
- ; 2493 2 SUB_TYPE, ! Subtype for XFR_STATUS call
- ; 2494 2 STATUS; ! Status returned by various routines
- ; 2495 2
- ; 2496 2 !
- ; 2497 2 ! If there is nothing in the data packet, we should not bother to send it.
- ; 2498 2 ! Instead, we will just call BFR_FILL again to get some more data
- ; 2499 2 !
- ; 2500 2
- ; 2501 2 IF .SIZE NEQ 0 ! [108]
- ; 2502 2 THEN
- ; 2503 3 BEGIN
- ; 2504 3 !
- ; 2505 3 ! Check to see if the number of retries have been exceeded.
- ; 2506 3 !
- ; 2507 3
- ; 2508 3 IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 2509 3
- ; 2510 3 !
- ; 2511 3 ! Not exceeded yet. Increment the number of retries we have attempted
- ; 2512 3 ! on this message.
- ; 2513 3 !
- ; 2514 3 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 2515 3 !
- ; 2516 3 ! Attempt to send the packet and abort if the send fails.
- ; 2517 3 !
- ; 2518 3
- ; 2519 3 IF NOT SEND_PACKET (MSG_DATA, .SIZE, .MSG_NUMBER) THEN RETURN STATE_EX;
- ; 2520 3
- ; 2521 3 !
- ; 2522 3 ! Attempt to receive a message from the remote KERMIT.
- ; 2523 3 !
- ; 2524 3 STATUS = REC_PACKET ();
- ; 2525 3
- ; 2526 3 IF NOT .STATUS
- ; 2527 3 THEN
- ; 2528 4 BEGIN
- ; 2529 4
- ; 2530 5 IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL
- ; 2531 5 KER_CHKSUMERR)
- ; 2532 4 THEN
- ; 2533 4 RETURN .STATE
- ; 2534 4 ELSE
- ; 2535 4 RETURN STATE_EX;
- ; 2536 4
- ; 2537 3 END;
- ; 2538 3
- ; 2539 3 !
- ; 2540 3 ! Determine if the message is a NAK and the NAK is for the message number
- ; 2541 3 ! that we are current working on. If the NAK is for the next packet then
- ; 2542 3 ! treat it like an ACK for this packet
- ; 2543 3 !
- ; 2544 3
- ; 2545 4 IF .REC_TYPE EQL MSG_NAK AND (.REC_SEQ NEQ ((.MSG_NUMBER + 1) AND %O'77'))
- ; 2546 3 THEN
- ; 2547 3 RETURN .STATE;
- ; 2548 3
- ; 2549 3 !
- ; 2550 3 ! Make sure we have a NAK or ACK
- ; 2551 3 !
- ; 2552 3
- ; 2553 4 IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
- ; 2554 3 THEN
- ; 2555 3 !
- ; 2556 3 ! Not an ACK or NAK, abort.
- ; 2557 3 !
- ; 2558 4 BEGIN
- ; 2559 4 KRM_ERROR (KER_PROTOERR);
- ; 2560 4 RETURN STATE_A;
- ; 2561 3 END;
- ; 2562 3
- ; 2563 3 !
- ; 2564 3 ! Is this for this message?
- ; 2565 3 !
- ; 2566 3
- ; 2567 3 IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
- ; 2568 3
- ; 2569 3 !
- ; 2570 3 ! It was. Set up for sending the next data message to the remote KERMIT
- ; 2571 3 ! and return.
- ; 2572 3 !
- ; 2573 3 !
- ; 2574 3 ! Check for data field in ACK indicating abort file or stream
- ; 2575 3 !
- ; 2576 3 !
- ; 2577 3
- ; 2578 3 IF .REC_TYPE EQL MSG_ACK AND .REC_LENGTH EQL 1
- ; 2579 3 THEN
- ; 2580 3
- ; 2581 3 SELECTONE CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG, CHR_SIZE)) OF ! [108]
- ; 2582 3 SET
- ; 2583 3
- ; 2584 3 [MSG_ACK_ABT_CUR] :
- ; 2585 3 ABT_CUR_FILE = TRUE;
- ; 2586 3
- ; 2587 3 [MSG_ACK_ABT_ALL] :
- ; 2588 3 ABT_ALL_FILE = TRUE;
- ; 2589 3 TES;
- ; 2590 3
- ; 2591 3 NUM_RETRIES = 0;
- ; 2592 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 2593 2 END; ! End of IF .SIZE NEQ 0
- ; 2594 2
- ; 2595 3 IF (BFR_FILL (FALSE) EQL KER_NORMAL) AND NOT (.ABT_CUR_FILE OR .ABT_ALL_FILE)
- ; 2596 2 THEN
- ; 2597 2 RETURN STATE_SD
- ; 2598 2 ELSE
- ; 2599 3 BEGIN
- ; 2600 3
- ; 2601 3 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 2602 3 THEN
- ; 2603 4 BEGIN
- ; 2604 4
- ; 2605 4 IF .ABT_ALL_FILE
- ; 2606 4 THEN
- ; 2607 4 TT_TEXT (UPLIT (%ASCIZ' [Group interrupted]'))
- ; 2608 4 ELSE
- ; 2609 4
- ; 2610 4 IF .ABT_CUR_FILE
- ; 2611 4 THEN
- ; 2612 4 TT_TEXT (UPLIT (%ASCIZ' [Interrupted]'))
- ; 2613 4 ELSE
- ; 2614 4 TT_TEXT (UPLIT (%ASCIZ' [OK]'));
- ; 2615 4
- ; 2616 4 TT_CRLF ();
- ; 2617 3 END;
- ; 2618 3
- ; 2619 3 IF .FLAG_FILE_OPEN THEN FILE_CLOSE (FALSE);
- ; 2620 3
- ; 2621 3 SUB_TYPE = %C'C'; ! Assume ok
- ; 2622 3
- ; 2623 3 IF .ABT_ALL_FILE
- ; 2624 3 THEN
- ; 2625 3 SUB_TYPE = %C'Z'
- ; 2626 3 ELSE
- ; 2627 3
- ; 2628 3 IF .ABT_CUR_FILE THEN SUB_TYPE = %C'X';
- ; 2629 3
- ; 2630 3 XFR_STATUS (%C'F', .SUB_TYPE);
- ; 2631 3 FLAG_FILE_OPEN = FALSE;
- ; 2632 3 RETURN STATE_SZ;
- ; 2633 2 END;
- ; 2634 2
- ; 2635 1 END;
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAB: .ASCII \ [Group interrupted]\<0><0><0><0>
- ; 20 70 75 6F 72 47 5B 20 0000C
- ; 70 75 72 72 65 74 6E 69 00014
- ; 00 00 00 00 5D 64 65 74 0001C
- P.AAC: .ASCII \ [Interrupted]\<0><0> ; 72 72 65 74 6E 49 5B 20 00024
- ; 00 00 5D 64 65 74 70 75 0002C
- P.AAD: .ASCII \ [OK]\<0><0><0> ; 00 00 00 5D 4B 4F 5B 20 00034
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;SEND_DATA
- U.3: .WORD ^M<R2,R3,R4,R5,R6,R7> ;Save R2,R3,R4,R5,R6,R7 2453 00FC 00000
- MOVAB G^FLAG_FILE_OPEN, R7 ;FLAG_FILE_OPEN, R7 57 00000000' 00 9E 00002
- MOVAB G^P.AAB, R6 ;P.AAB, R6 56 00000000' 00 9E 00009
- MOVAB G^ABT_ALL_FILE, R5 ;ABT_ALL_FILE, R5 55 00000000G 00 9E 00010
- MOVAB G^ABT_CUR_FILE, R4 ;ABT_CUR_FILE, R4 54 00000000G 00 9E 00017
- MOVAB G^U.55, R3 ;U.55, R3 53 00000000' 00 9E 0001E
- MOVL -12(R3), R0 ;SIZE, R0 2501 50 F4 A3 D0 00025
- BNEQ 1$ ;1$ 03 12 00029
- BRW 11$ ;11$ 00D1 31 0002B
- 1$: CMPL -4(R3), G^PKT_RETRIES ;NUM_RETRIES, PKT_RETRIES 2508 00000000G 00 FC A3 D1 0002E
- BLEQ 2$ ;2$ 04 15 00036
- MOVL #20, R0 ;#20, R0 50 14 D0 00038
- RET ; 04 0003B
- 2$: INCL -4(R3) ;NUM_RETRIES 2514 FC A3 D6 0003C
- PUSHL (R3) ;MSG_NUMBER 2519 63 DD 0003F
- PUSHL R0 ;R0 50 DD 00041
- MOVZBL #68, -(SP) ;#68, -(SP) 7E 44 8F 9A 00043
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 00047
- BLBC R0, 3$ ;R0, 3$ 25 50 E9 0004E
- CALLS #0, G^U.26 ;#0, U.26 2524 00000000V 00 00 FB 00051
- BLBS R0, 4$ ;STATUS, 4$ 2526 1F 50 E8 00058
- CMPL R0, #134316234 ;STATUS, #134316234 2530 080180CA 8F 50 D1 0005B
- BEQL 7$ ;7$ 64 13 00062
- CMPL R0, #134316248 ;STATUS, #134316248 080180D8 8F 50 D1 00064
- BEQL 7$ ;7$ 5B 13 0006B
- CMPL R0, #134316178 ;STATUS, #134316178 2531 08018092 8F 50 D1 0006D
- BEQL 7$ ;7$ 52 13 00074
- 3$: MOVL #19, R0 ;#19, R0 2535 50 13 D0 00076
- RET ; 04 00079
- 4$: MOVL 12(R3), R1 ;REC_TYPE, R1 2545 51 0C A3 D0 0007A
- CLRL R2 ;R2 52 D4 0007E
- CMPL R1, #78 ;R1, #78 0000004E 8F 51 D1 00080
- BNEQ 5$ ;5$ 0E 12 00087
- INCL R2 ;R2 52 D6 00089
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 63 01 C1 0008B
- ; 50 0008E
- CMPZV #0, #6, R0, 4(R3) ;#0, #6, R0, REC_SEQ 06 00 ED 0008F
- ; 04 A3 50 00092
- BNEQ 7$ ;7$ 31 12 00095
- 5$: CMPL R1, #89 ;R1, #89 2553 00000059 8F 51 D1 00097
- BEQL 6$ ;6$ 14 13 0009E
- BLBS R2, 6$ ;R2, 6$ 11 52 E8 000A0
- PUSHL #134316226 ;#134316226 2559 080180C2 8F DD 000A3
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 000A9
- MOVL #10, R0 ;#10, R0 2560 50 0A D0 000B0
- RET ; 04 000B3
- 6$: CLRL R0 ;R0 2567 50 D4 000B4
- CMPL 12(R3), #89 ;REC_TYPE, #89 00000059 8F 0C A3 D1 000B6
- BNEQ 8$ ;8$ 0D 12 000BE
- INCL R0 ;R0 50 D6 000C0
- CMPL 4(R3), (R3) ;REC_SEQ, MSG_NUMBER 63 04 A3 D1 000C2
- BEQL 8$ ;8$ 05 13 000C6
- 7$: MOVL -16(R3), R0 ;STATE, R0 50 F0 A3 D0 000C8
- RET ; 04 000CC
- 8$: BLBC R0, 10$ ;R0, 10$ 2578 23 50 E9 000CD
- CMPL 8(R3), #1 ;REC_LENGTH, #1 01 08 A3 D1 000D0
- BNEQ 10$ ;10$ 1D 12 000D4
- MOVL -64(R3), R0 ;RECV_PKT_MSG, R0 2581 50 C0 A3 D0 000D6
- MOVZBL 16(R3)[R0], R0 ;REC_MSG[R0], R0 50 10 A340 9A 000DA
- CMPB R0, #88 ;R0, #88 2584 58 8F 50 91 000DF
- BNEQ 9$ ;9$ 05 12 000E3
- MOVL #1, (R4) ;#1, ABT_CUR_FILE 2585 64 01 D0 000E5
- BRB 10$ ;10$ 09 11 000E8
- 9$: CMPB R0, #90 ;R0, #90 2587 5A 8F 50 91 000EA
- BNEQ 10$ ;10$ 03 12 000EE
- MOVL #1, (R5) ;#1, ABT_ALL_FILE 2588 65 01 D0 000F0
- 10$: CLRL -4(R3) ;NUM_RETRIES 2591 FC A3 D4 000F3
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 2592 63 01 C1 000F6
- ; 50 000F9
- EXTZV #0, #6, R0, (R3) ;#0, #6, R0, MSG_NUMBER 06 00 EF 000FA
- ; 63 50 000FD
- 11$: CLRL -(SP) ;-(SP) 2595 7E D4 000FF
- CALLS #1, G^U.29 ;#1, U.29 00000000V 00 01 FB 00101
- CMPL R0, #134316043 ;R0, #134316043 0801800B 8F 50 D1 00108
- BNEQ 12$ ;12$ 0A 12 0010F
- BLBS (R4), 12$ ;ABT_CUR_FILE, 12$ 07 64 E8 00111
- BLBS (R5), 12$ ;ABT_ALL_FILE, 12$ 04 65 E8 00114
- MOVL #3, R0 ;#3, R0 2597 50 03 D0 00117
- RET ; 04 0011A
- 12$: BLBS G^CONNECT_FLAG, 16$ ;CONNECT_FLAG, 16$ 2601 27 00000000G 00 E8 0011B
- BLBC G^TY_FIL, 16$ ;TY_FIL, 16$ 20 00000000G 00 E9 00122
- BLBC (R5), 13$ ;ABT_ALL_FILE, 13$ 2605 04 65 E9 00129
- PUSHL R6 ;R6 2607 56 DD 0012C
- BRB 15$ ;15$ 0B 11 0012E
- 13$: BLBC (R4), 14$ ;ABT_CUR_FILE, 14$ 2610 05 64 E9 00130
- PUSHAB 24(R6) ;P.AAC 2612 18 A6 9F 00133
- BRB 15$ ;15$ 03 11 00136
- 14$: PUSHAB 40(R6) ;P.AAD 2614 28 A6 9F 00138
- 15$: CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 0013B
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 2616 00000000G 00 00 FB 00142
- 16$: BLBC (R7), 17$ ;FLAG_FILE_OPEN, 17$ 2619 09 67 E9 00149
- CLRL -(SP) ;-(SP) 7E D4 0014C
- CALLS #1, G^FILE_CLOSE ;#1, FILE_CLOSE 00000000G 00 01 FB 0014E
- 17$: MOVZBL #67, R0 ;#67, SUB_TYPE 2621 50 43 8F 9A 00155
- BLBC (R5), 18$ ;ABT_ALL_FILE, 18$ 2623 06 65 E9 00159
- MOVZBL #90, R0 ;#90, SUB_TYPE 2625 50 5A 8F 9A 0015C
- BRB 19$ ;19$ 07 11 00160
- 18$: BLBC (R4), 19$ ;ABT_CUR_FILE, 19$ 2628 04 64 E9 00162
- MOVZBL #88, R0 ;#88, SUB_TYPE 50 58 8F 9A 00165
- 19$: PUSHL R0 ;SUB_TYPE 2630 50 DD 00169
- MOVZBL #70, -(SP) ;#70, -(SP) 7E 46 8F 9A 0016B
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 0016F
- CLRL (R7) ;FLAG_FILE_OPEN 2631 67 D4 00176
- MOVL #4, R0 ;#4, R0 2632 50 04 D0 00178
- RET ; 04 0017B
-
- ; Routine Size: 380 bytes, Routine Base: $CODE$ + 072F
-
-
- ; 2636 1 %SBTTL 'SEND_FILE'
- ; 2637 1 ROUTINE SEND_FILE =
- ; 2638 1
- ; 2639 1 !++
- ; 2640 1 ! FUNCTIONAL DESCRIPTION:
- ; 2641 1 !
- ; 2642 1 ! This routine will send the file specification that is being
- ; 2643 1 ! transfered, or it will send a text header message.
- ; 2644 1 !
- ; 2645 1 ! CALLING SEQUENCE:
- ; 2646 1 !
- ; 2647 1 ! STATE = SEND_FILE();
- ; 2648 1 !
- ; 2649 1 ! INPUT PARAMETERS:
- ; 2650 1 !
- ; 2651 1 ! None.
- ; 2652 1 !
- ; 2653 1 ! IMPLICIT INPUTS:
- ; 2654 1 !
- ; 2655 1 ! TEXT_HEAD_FLAG - If true, send text header instead of file header
- ; 2656 1 !
- ; 2657 1 ! OUTPUT PARAMETERS:
- ; 2658 1 !
- ; 2659 1 ! New state to change the finite state machine to.
- ; 2660 1 !
- ; 2661 1 ! IMPLICIT OUTPUTS:
- ; 2662 1 !
- ; 2663 1 ! None.
- ; 2664 1 !
- ; 2665 1 ! COMPLETION CODES:
- ; 2666 1 !
- ; 2667 1 ! None.
- ; 2668 1 !
- ; 2669 1 ! SIDE EFFECTS:
- ; 2670 1 !
- ; 2671 1 ! None.
- ; 2672 1 !
- ; 2673 1 !--
- ; 2674 1
- ; 2675 2 BEGIN
- ; 2676 2
- ; 2677 2 LOCAL
- ; 2678 2 M_TYPE, ! Message type to send
- ; 2679 2 STATUS; ! Status returned by various routines
- ; 2680 2
- ; 2681 2 !
- ; 2682 2 ! Flag we don't want to abort yet
- ; 2683 2 !
- ; 2684 2 ABT_CUR_FILE = FALSE;
- ; 2685 2 ABT_ALL_FILE = FALSE;
- ; 2686 2 !
- ; 2687 2 ! First determine if we have exceed the number of retries that are
- ; 2688 2 ! allowed to attempt to send this message.
- ; 2689 2 !
- ; 2690 2
- ; 2691 2 IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 2692 2
- ; 2693 2 !
- ; 2694 2 ! The number of retries are not exceeded. Increment the number and then
- ; 2695 2 ! attempt to send the packet again.
- ; 2696 2 !
- ; 2697 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 2698 2 SIZE = 0; ! Assume no name
- ; 2699 2
- ; 2700 2 IF .TEXT_HEAD_FLAG THEN M_TYPE = MSG_TEXT ELSE M_TYPE = MSG_FILE;
- ; 2701 2
- ; 2702 2 IF .FILE_SIZE NEQ 0 AND NOT .NO_FILE_NEEDED
- ; 2703 2 THEN
- ; 2704 3 BEGIN
- ; 2705 3 ![025] CH$MOVE (.FILE_SIZE, CH$PTR (FILE_NAME),
- ; 2706 3 ![025] CH$PTR (SND_MSG, PKT_MSG,
- ; 2707 3 ![025] CHR_SIZE));
- ; 2708 3 ![025]
- ; 2709 3 ![025] Fill packet with file name
- ; 2710 3 ![025]
- ; 2711 3 SET_STRING (CH$PTR (FILE_NAME), .FILE_SIZE, TRUE);
- ; 2712 3 BFR_FILL (TRUE);
- ; 2713 3 SET_STRING (0, 0, FALSE);
- ; 2714 2 END;
- ; 2715 2
- ; 2716 2 IF NOT SEND_PACKET (.M_TYPE, .SIZE, .MSG_NUMBER) THEN RETURN STATE_EX;
- ; 2717 2
- ; 2718 2 !
- ; 2719 2 ! Now get the responce from the remote KERMIT.
- ; 2720 2 !
- ; 2721 2 STATUS = REC_PACKET ();
- ; 2722 2
- ; 2723 2 IF NOT .STATUS
- ; 2724 2 THEN
- ; 2725 3 BEGIN
- ; 2726 3
- ; 2727 4 IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
- ; 2728 3 THEN
- ; 2729 3 RETURN .STATE
- ; 2730 3 ELSE
- ; 2731 3 RETURN STATE_EX;
- ; 2732 3
- ; 2733 2 END;
- ; 2734 2
- ; 2735 2 !
- ; 2736 2 ! Determine if the packet is good.
- ; 2737 2 !
- ; 2738 2
- ; 2739 3 IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
- ; 2740 2 THEN
- ; 2741 3 BEGIN
- ; 2742 3 KRM_ERROR (KER_PROTOERR);
- ; 2743 3 RETURN STATE_A;
- ; 2744 2 END;
- ; 2745 2
- ; 2746 2 !
- ; 2747 2 ! If this is a NAK and the message number is not the one we just send
- ; 2748 2 ! treat this like an ACK, otherwise resend the last packet.
- ; 2749 2 !
- ; 2750 2
- ; 2751 2 IF .REC_TYPE EQL MSG_NAK AND (.REC_SEQ NEQ ((.MSG_NUMBER + 1) AND %O'77')) THEN RETURN .STATE;
- ; 2752 2
- ; 2753 2 IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
- ; 2754 2
- ; 2755 2 !
- ; 2756 2 ! If all is ok, bump the message number and fill first buffer
- ; 2757 2 !
- ; 2758 2 NUM_RETRIES = 0;
- ; 2759 2 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 2760 2
- ; 2761 2 IF BFR_FILL (TRUE) THEN RETURN STATE_SD ELSE RETURN STATE_A;
- ; 2762 2
- ; 2763 1 END; ! End of SEND_FILE
-
-
-
-
-
- ;SEND_FILE
- U.4: .WORD ^M<R2,R3,R4,R5> ;Save R2,R3,R4,R5 2637 003C 00000
- MOVAB G^U.29, R5 ;U.29, R5 55 00000000V 00 9E 00002
- MOVAB G^U.30, R4 ;U.30, R4 54 00000000V 00 9E 00009
- MOVAB G^U.55, R3 ;U.55, R3 53 00000000' 00 9E 00010
- CLRL G^ABT_CUR_FILE ;ABT_CUR_FILE 2684 00000000G 00 D4 00017
- CLRL G^ABT_ALL_FILE ;ABT_ALL_FILE 2685 00000000G 00 D4 0001D
- CMPL -4(R3), G^PKT_RETRIES ;NUM_RETRIES, PKT_RETRIES 2691 00000000G 00 FC A3 D1 00023
- BLEQ 1$ ;1$ 04 15 0002B
- MOVL #20, R0 ;#20, R0 50 14 D0 0002D
- RET ; 04 00030
- 1$: INCL -4(R3) ;NUM_RETRIES 2697 FC A3 D6 00031
- CLRL -12(R3) ;SIZE 2698 F4 A3 D4 00034
- BLBC 2028(R3), 2$ ;TEXT_HEAD_FLAG, 2$ 2700 06 07EC C3 E9 00037
- MOVZBL #88, R2 ;#88, M_TYPE 52 58 8F 9A 0003C
- BRB 3$ ;3$ 04 11 00040
- 2$: MOVZBL #70, R2 ;#70, M_TYPE 52 46 8F 9A 00042
- 3$: MOVL G^FILE_SIZE, R0 ;FILE_SIZE, R0 2702 50 00000000G 00 D0 00046
- BEQL 4$ ;4$ 1E 13 0004D
- BLBS 2032(R3), 4$ ;NO_FILE_NEEDED, 4$ 19 07F0 C3 E8 0004F
- PUSHL #1 ;#1 2711 01 DD 00054
- PUSHL R0 ;R0 50 DD 00056
- PUSHAB G^FILE_NAME ;FILE_NAME 00000000G 00 9F 00058
- CALLS #3, (R4) ;#3, SET_STRING 64 03 FB 0005E
- PUSHL #1 ;#1 2712 01 DD 00061
- CALLS #1, (R5) ;#1, BFR_FILL 65 01 FB 00063
- CLRQ -(SP) ;-(SP) 2713 7E 7C 00066
- CLRL -(SP) ;-(SP) 7E D4 00068
- CALLS #3, (R4) ;#3, SET_STRING 64 03 FB 0006A
- 4$: PUSHL (R3) ;MSG_NUMBER 2716 63 DD 0006D
- PUSHL -12(R3) ;SIZE F4 A3 DD 0006F
- PUSHL R2 ;M_TYPE 52 DD 00072
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 00074
- BLBC R0, 5$ ;R0, 5$ 25 50 E9 0007B
- CALLS #0, G^U.26 ;#0, U.26 2721 00000000V 00 00 FB 0007E
- BLBS R0, 6$ ;STATUS, 6$ 2723 1F 50 E8 00085
- CMPL R0, #134316234 ;STATUS, #134316234 2727 080180CA 8F 50 D1 00088
- BEQL 9$ ;9$ 63 13 0008F
- CMPL R0, #134316248 ;STATUS, #134316248 080180D8 8F 50 D1 00091
- BEQL 9$ ;9$ 5A 13 00098
- CMPL R0, #134316178 ;STATUS, #134316178 08018092 8F 50 D1 0009A
- BEQL 9$ ;9$ 51 13 000A1
- 5$: MOVL #19, R0 ;#19, R0 2731 50 13 D0 000A3
- RET ; 04 000A6
- 6$: MOVL 12(R3), R0 ;REC_TYPE, R0 2739 50 0C A3 D0 000A7
- CMPL R0, #89 ;R0, #89 00000059 8F 50 D1 000AB
- BEQL 7$ ;7$ 18 13 000B2
- CMPL R0, #78 ;R0, #78 0000004E 8F 50 D1 000B4
- BEQL 7$ ;7$ 0F 13 000BB
- PUSHL #134316226 ;#134316226 2742 080180C2 8F DD 000BD
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 000C3
- BRB 11$ ;11$ 2743 45 11 000CA
- 7$: MOVL 12(R3), R1 ;REC_TYPE, R1 2751 51 0C A3 D0 000CC
- CMPL R1, #78 ;R1, #78 0000004E 8F 51 D1 000D0
- BNEQ 8$ ;8$ 0C 12 000D7
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 63 01 C1 000D9
- ; 50 000DC
- CMPZV #0, #6, R0, 4(R3) ;#0, #6, R0, REC_SEQ 06 00 ED 000DD
- ; 04 A3 50 000E0
- BNEQ 9$ ;9$ 0F 12 000E3
- 8$: CMPL R1, #89 ;R1, #89 2753 00000059 8F 51 D1 000E5
- BNEQ 10$ ;10$ 0B 12 000EC
- CMPL 4(R3), (R3) ;REC_SEQ, MSG_NUMBER 63 04 A3 D1 000EE
- BEQL 10$ ;10$ 05 13 000F2
- 9$: MOVL -16(R3), R0 ;STATE, R0 50 F0 A3 D0 000F4
- RET ; 04 000F8
- 10$: CLRL -4(R3) ;NUM_RETRIES 2758 FC A3 D4 000F9
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 2759 63 01 C1 000FC
- ; 50 000FF
- EXTZV #0, #6, R0, (R3) ;#0, #6, R0, MSG_NUMBER 06 00 EF 00100
- ; 63 50 00103
- PUSHL #1 ;#1 2761 01 DD 00105
- CALLS #1, (R5) ;#1, BFR_FILL 65 01 FB 00107
- BLBC R0, 11$ ;R0, 11$ 04 50 E9 0010A
- MOVL #3, R0 ;#3, R0 50 03 D0 0010D
- RET ; 04 00110
- 11$: MOVL #10, R0 ;#10, R0 50 0A D0 00111
- RET ; 04 00114
-
- ; Routine Size: 277 bytes, Routine Base: $CODE$ + 08AB
-
-
- ; 2764 1 %SBTTL 'SEND_EOF'
- ; 2765 1 ROUTINE SEND_EOF =
- ; 2766 1
- ; 2767 1 !++
- ; 2768 1 ! FUNCTIONAL DESCRIPTION:
- ; 2769 1 !
- ; 2770 1 ! This routine will send the end of file message to the remote
- ; 2771 1 ! KERMIT. It will then determine if there are more files to
- ; 2772 1 ! send to the remote.
- ; 2773 1 !
- ; 2774 1 ! CALLING SEQUENCE:
- ; 2775 1 !
- ; 2776 1 ! STATE = SEND_EOF();
- ; 2777 1 !
- ; 2778 1 ! INPUT PARAMETERS:
- ; 2779 1 !
- ; 2780 1 ! None.
- ; 2781 1 !
- ; 2782 1 ! IMPLICIT INPUTS:
- ; 2783 1 !
- ; 2784 1 ! None.
- ; 2785 1 !
- ; 2786 1 ! OUTPUT PARAMETERS:
- ; 2787 1 !
- ; 2788 1 ! New state to change the finite state machine to.
- ; 2789 1 !
- ; 2790 1 ! IMPLICIT OUTPUTS:
- ; 2791 1 !
- ; 2792 1 ! None.
- ; 2793 1 !
- ; 2794 1 ! COMPLETION CODES:
- ; 2795 1 !
- ; 2796 1 ! None.
- ; 2797 1 !
- ; 2798 1 ! SIDE EFFECTS:
- ; 2799 1 !
- ; 2800 1 ! Sets up for the next file to be processed if there is one.
- ; 2801 1 !
- ; 2802 1 !--
- ; 2803 1
- ; 2804 2 BEGIN
- ; 2805 2
- ; 2806 2 LOCAL
- ; 2807 2 STATUS, ! Status returned by various routines
- ; 2808 2 EOF_MSG_LEN; ! Length of EOF message to send
- ; 2809 2
- ; 2810 2 !
- ; 2811 2 ! First determine if we have exceed the number of retries that are
- ; 2812 2 ! allowed to attempt to send this message.
- ; 2813 2 !
- ; 2814 2
- ; 2815 2 IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 2816 2
- ; 2817 2 !
- ; 2818 2 ! The number of retries are not exceeded. Increment the number and then
- ; 2819 2 ! attempt to send the packet again.
- ; 2820 2 !
- ; 2821 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 2822 2 !
- ; 2823 2 ! Store character in packet to indicate discard of file
- ; 2824 2 ! Character will only be sent if file should be discarded
- ; 2825 2 !
- ; 2826 2 CH$WCHAR (MSG_EOF_DISCARD, CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE));
- ; 2827 2
- ; 2828 2 IF .ABT_CUR_FILE OR .ABT_ALL_FILE THEN EOF_MSG_LEN = 1 ELSE EOF_MSG_LEN = 0;
- ; 2829 2
- ; 2830 2 IF NOT SEND_PACKET (MSG_EOF, .EOF_MSG_LEN, .MSG_NUMBER) THEN RETURN STATE_EX;
- ; 2831 2
- ; 2832 2 !
- ; 2833 2 ! Now get the responce from the remote KERMIT.
- ; 2834 2 !
- ; 2835 2 STATUS = REC_PACKET ();
- ; 2836 2
- ; 2837 2 IF NOT .STATUS
- ; 2838 2 THEN
- ; 2839 3 BEGIN
- ; 2840 3
- ; 2841 4 IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
- ; 2842 3 THEN
- ; 2843 3 RETURN .STATE
- ; 2844 3 ELSE
- ; 2845 3 RETURN STATE_EX;
- ; 2846 3
- ; 2847 2 END;
- ; 2848 2
- ; 2849 2 !
- ; 2850 2 ! Determine if the packet is good.
- ; 2851 2 !
- ; 2852 2
- ; 2853 3 IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
- ; 2854 2 THEN
- ; 2855 3 BEGIN
- ; 2856 3 KRM_ERROR (KER_PROTOERR);
- ; 2857 3 RETURN STATE_A;
- ; 2858 2 END;
- ; 2859 2
- ; 2860 2 !
- ; 2861 2 ! If this is a NAK and the message number is not the one we just send
- ; 2862 2 ! treat this like an ACK, otherwise resend the last packet.
- ; 2863 2 !
- ; 2864 2
- ; 2865 2 IF .REC_TYPE EQL MSG_NAK AND (.REC_SEQ NEQ ((.MSG_NUMBER + 1) AND %O'77')) THEN RETURN .STATE;
- ; 2866 2
- ; 2867 2 IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
- ; 2868 2
- ; 2869 2 !
- ; 2870 2 ! Here to determine if there is another file to send.
- ; 2871 2 !
- ; 2872 2 NUM_RETRIES = 0;
- ; 2873 2 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 2874 2
- ; 2875 2 IF NOT .ABT_ALL_FILE THEN STATUS = NEXT_FILE () ELSE STATUS = KER_NOMORFILES;
- ; 2876 2
- ; 2877 3 IF ( NOT .STATUS) OR (.STATUS EQL KER_NOMORFILES)
- ; 2878 2 THEN
- ; 2879 3 BEGIN
- ; 2880 3
- ; 2881 3 IF (.STATUS NEQ KER_NOMORFILES) THEN RETURN STATE_A ELSE RETURN STATE_SB;
- ; 2882 3
- ; 2883 3 END
- ; 2884 2 ELSE
- ; 2885 3 BEGIN
- ; 2886 3 FLAG_FILE_OPEN = TRUE; ! Have a file open again
- ; 2887 3
- ; 2888 3 IF .FIL_NORMAL_FORM THEN NORMALIZE_FILE (FILE_NAME, FILE_SIZE, -1, -1);
- ; 2889 3
- ; 2890 3 XFR_STATUS (%C'F', %C'S'); ! Inform display routine
- ; 2891 3
- ; 2892 3 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 2893 3 THEN
- ; 2894 4 BEGIN
- ; 2895 4 !![045] TT_TEXT (UPLIT (%ASCIZ'Sending: '));
- ; 2896 4 TT_TEXT (FILE_NAME);
- ; 2897 4 TT_OUTPUT ();
- ; 2898 3 END;
- ; 2899 3
- ; 2900 3 FILE_CHARS = 0; ! No characters sent yet
- ; 2901 3 RETURN STATE_SF;
- ; 2902 2 END;
- ; 2903 2
- ; 2904 1 END; ! End of SEND_EOF
-
-
-
-
-
- ;SEND_EOF
- U.7: .WORD ^M<R2,R3,R4,R5> ;Save R2,R3,R4,R5 2765 003C 00000
- MOVAB G^FILE_NAME, R5 ;FILE_NAME, R5 55 00000000G 00 9E 00002
- MOVAB G^ABT_ALL_FILE, R4 ;ABT_ALL_FILE, R4 54 00000000G 00 9E 00009
- MOVAB G^U.55, R3 ;U.55, R3 53 00000000' 00 9E 00010
- CMPL -4(R3), G^PKT_RETRIES ;NUM_RETRIES, PKT_RETRIES 2815 00000000G 00 FC A3 D1 00017
- BLEQ 1$ ;1$ 04 15 0001F
- MOVL #20, R0 ;#20, R0 50 14 D0 00021
- RET ; 04 00024
- 1$: INCL -4(R3) ;NUM_RETRIES 2821 FC A3 D6 00025
- MOVB #68, 1024(R3) ;#68, SND_MSG+4 2826 0400 C3 44 8F 90 00028
- BLBS G^ABT_CUR_FILE, 2$ ;ABT_CUR_FILE, 2$ 2828 03 00000000G 00 E8 0002E
- BLBC (R4), 3$ ;ABT_ALL_FILE, 3$ 05 64 E9 00035
- 2$: MOVL #1, R0 ;#1, EOF_MSG_LEN 50 01 D0 00038
- BRB 4$ ;4$ 02 11 0003B
- 3$: CLRL R0 ;EOF_MSG_LEN 50 D4 0003D
- 4$: PUSHL (R3) ;MSG_NUMBER 2830 63 DD 0003F
- PUSHL R0 ;EOF_MSG_LEN 50 DD 00041
- MOVZBL #90, -(SP) ;#90, -(SP) 7E 5A 8F 9A 00043
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 00047
- BLBC R0, 5$ ;R0, 5$ 28 50 E9 0004E
- CALLS #0, G^U.26 ;#0, U.26 2835 00000000V 00 00 FB 00051
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00058
- BLBS R2, 6$ ;STATUS, 6$ 2837 1F 52 E8 0005B
- CMPL R2, #134316234 ;STATUS, #134316234 2841 080180CA 8F 52 D1 0005E
- BEQL 9$ ;9$ 63 13 00065
- CMPL R2, #134316248 ;STATUS, #134316248 080180D8 8F 52 D1 00067
- BEQL 9$ ;9$ 5A 13 0006E
- CMPL R2, #134316178 ;STATUS, #134316178 08018092 8F 52 D1 00070
- BEQL 9$ ;9$ 51 13 00077
- 5$: MOVL #19, R0 ;#19, R0 2845 50 13 D0 00079
- RET ; 04 0007C
- 6$: MOVL 12(R3), R0 ;REC_TYPE, R0 2853 50 0C A3 D0 0007D
- CMPL R0, #89 ;R0, #89 00000059 8F 50 D1 00081
- BEQL 7$ ;7$ 18 13 00088
- CMPL R0, #78 ;R0, #78 0000004E 8F 50 D1 0008A
- BEQL 7$ ;7$ 0F 13 00091
- PUSHL #134316226 ;#134316226 2856 080180C2 8F DD 00093
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 00099
- BRB 14$ ;14$ 2857 64 11 000A0
- 7$: MOVL 12(R3), R1 ;REC_TYPE, R1 2865 51 0C A3 D0 000A2
- CMPL R1, #78 ;R1, #78 0000004E 8F 51 D1 000A6
- BNEQ 8$ ;8$ 0C 12 000AD
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 63 01 C1 000AF
- ; 50 000B2
- CMPZV #0, #6, R0, 4(R3) ;#0, #6, R0, REC_SEQ 06 00 ED 000B3
- ; 04 A3 50 000B6
- BNEQ 9$ ;9$ 0F 12 000B9
- 8$: CMPL R1, #89 ;R1, #89 2867 00000059 8F 51 D1 000BB
- BNEQ 10$ ;10$ 0B 12 000C2
- CMPL 4(R3), (R3) ;REC_SEQ, MSG_NUMBER 63 04 A3 D1 000C4
- BEQL 10$ ;10$ 05 13 000C8
- 9$: MOVL -16(R3), R0 ;STATE, R0 50 F0 A3 D0 000CA
- RET ; 04 000CE
- 10$: CLRL -4(R3) ;NUM_RETRIES 2872 FC A3 D4 000CF
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 2873 63 01 C1 000D2
- ; 50 000D5
- EXTZV #0, #6, R0, (R3) ;#0, #6, R0, MSG_NUMBER 06 00 EF 000D6
- ; 63 50 000D9
- BLBS (R4), 11$ ;ABT_ALL_FILE, 11$ 2875 0C 64 E8 000DB
- CALLS #0, G^NEXT_FILE ;#0, NEXT_FILE 00000000G 00 00 FB 000DE
- MOVL R0, R2 ;R0, STATUS 52 50 D0 000E5
- BRB 12$ ;12$ 07 11 000E8
- 11$: MOVL #134316147, R2 ;#134316147, STATUS 52 08018073 8F D0 000EA
- 12$: BLBC R2, 13$ ;STATUS, 13$ 2877 09 52 E9 000F1
- CMPL R2, #134316147 ;STATUS, #134316147 08018073 8F 52 D1 000F4
- BNEQ 16$ ;16$ 11 12 000FB
- 13$: CMPL R2, #134316147 ;STATUS, #134316147 2881 08018073 8F 52 D1 000FD
- BEQL 15$ ;15$ 04 13 00104
- 14$: MOVL #10, R0 ;#10, R0 50 0A D0 00106
- RET ; 04 00109
- 15$: MOVL #5, R0 ;#5, R0 50 05 D0 0010A
- RET ; 04 0010D
- 16$: MOVL #1, G^FLAG_FILE_OPEN ;#1, FLAG_FILE_OPEN 2886 00000000' 00 01 D0 0010E
- BLBC G^FIL_NORMAL_FORM, 17$ ;FIL_NORMAL_FORM, 17$ 2888 15 00000000G 00 E9 00115
- MNEGL #1, -(SP) ;#1, -(SP) 7E 01 CE 0011C
- MNEGL #1, -(SP) ;#1, -(SP) 7E 01 CE 0011F
- PUSHAB G^FILE_SIZE ;FILE_SIZE 00000000G 00 9F 00122
- PUSHL R5 ;R5 55 DD 00128
- CALLS #4, G^U.27 ;#4, U.27 00000000V 00 04 FB 0012A
- 17$: MOVZBL #83, -(SP) ;#83, -(SP) 2890 7E 53 8F 9A 00131
- MOVZBL #70, -(SP) ;#70, -(SP) 7E 46 8F 9A 00135
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 00139
- BLBS G^CONNECT_FLAG, 18$ ;CONNECT_FLAG, 18$ 2892 17 00000000G 00 E8 00140
- BLBC G^TY_FIL, 18$ ;TY_FIL, 18$ 10 00000000G 00 E9 00147
- PUSHL R5 ;R5 2896 55 DD 0014E
- CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 00150
- CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 2897 00000000G 00 00 FB 00157
- 18$: CLRL 2024(R3) ;FILE_CHARS 2900 07E8 C3 D4 0015E
- MOVL #2, R0 ;#2, R0 2901 50 02 D0 00162
- RET ; 04 00165
-
- ; Routine Size: 358 bytes, Routine Base: $CODE$ + 09C0
-
-
- ; 2905 1 %SBTTL 'SEND_INIT'
- ; 2906 1 ROUTINE SEND_INIT =
- ; 2907 1
- ; 2908 1 !++
- ; 2909 1 ! FUNCTIONAL DESCRIPTION:
- ; 2910 1 !
- ; 2911 1 ! This routine will send the initialization packet to the remote
- ; 2912 1 ! KERMIT. The message type sent is S.
- ; 2913 1 !
- ; 2914 1 ! CALLING SEQUENCE:
- ; 2915 1 !
- ; 2916 1 ! STATE = SEND_INIT();
- ; 2917 1 !
- ; 2918 1 ! INPUT PARAMETERS:
- ; 2919 1 !
- ; 2920 1 ! None.
- ; 2921 1 !
- ; 2922 1 ! IMPLICIT INPUTS:
- ; 2923 1 !
- ; 2924 1 ! None.
- ; 2925 1 !
- ; 2926 1 ! OUTPUT PARAMETERS:
- ; 2927 1 !
- ; 2928 1 ! New state to change the finite state machine to.
- ; 2929 1 !
- ; 2930 1 ! IMPLICIT OUTPUTS:
- ; 2931 1 !
- ; 2932 1 ! None.
- ; 2933 1 !
- ; 2934 1 ! COMPLETION CODES:
- ; 2935 1 !
- ; 2936 1 ! None.
- ; 2937 1 !
- ; 2938 1 ! SIDE EFFECTS:
- ; 2939 1 !
- ; 2940 1 ! None.
- ; 2941 1 !
- ; 2942 1 !--
- ; 2943 1
- ; 2944 2 BEGIN
- ; 2945 2
- ; 2946 2 LOCAL
- ; 2947 2 STATUS; ! Status returned by various routines
- ; 2948 2
- ; 2949 2 SET_SEND_INIT ();
- ; 2950 2
- ; 2951 2 IF .NUM_RETRIES GTR .SI_RETRIES THEN RETURN STATE_ER;
- ; 2952 2
- ; 2953 2 !
- ; 2954 2 ! Count the number of times we try this
- ; 2955 2 !
- ; 2956 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 2957 2
- ; 2958 2 IF NOT SEND_PACKET (MSG_SND_INIT, .SEND_INIT_SIZE, .MSG_NUMBER) THEN RETURN STATE_EX; ! [108]
- ; 2959 2
- ; 2960 2 !
- ; 2961 2 ! Determine if we received a packet it good condition. If we timed out or
- ; 2962 2 ! got an illegal message, just try again.
- ; 2963 2 !
- ; 2964 2 STATUS = REC_PACKET ();
- ; 2965 2
- ; 2966 2 IF NOT .STATUS
- ; 2967 2 THEN
- ; 2968 3 BEGIN
- ; 2969 3
- ; 2970 4 IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
- ; 2971 3 THEN
- ; 2972 3 RETURN .STATE
- ; 2973 3 ELSE
- ; 2974 3 RETURN STATE_EX;
- ; 2975 3
- ; 2976 2 END;
- ; 2977 2
- ; 2978 2 !
- ; 2979 2 ! Determine if the packet is good.
- ; 2980 2 !
- ; 2981 2
- ; 2982 2 IF .REC_TYPE NEQ MSG_ACK THEN RETURN .STATE;
- ; 2983 2
- ; 2984 2 IF .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
- ; 2985 2
- ; 2986 2 !
- ; 2987 2 ! Here if we have an ACK for the initialization message that was just sent
- ; 2988 2 ! to the remote KERMIT.
- ; 2989 2 !
- ; 2990 2
- ; 2991 2 IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN STATE_A;
- ; 2992 2
- ; 2993 2 BLK_CHK_TYPE = .INI_CHK_TYPE; ! We now use agreed upon block check type
- ; 2994 2 NUM_RETRIES = 0;
- ; 2995 2 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 2996 2 RETURN STATE_OF; ! Now need to open the file
- ; 2997 1 END;
-
-
-
-
-
- ;SEND_INIT
- U.8: .WORD ^M<R2> ;Save R2 2906 0004 00000
- MOVAB G^U.55, R2 ;U.55, R2 52 00000000' 00 9E 00002
- CALLS #0, G^U.20 ;#0, U.20 2949 00000000V 00 00 FB 00009
- CMPL -4(R2), G^SI_RETRIES ;NUM_RETRIES, SI_RETRIES 2951 00000000G 00 FC A2 D1 00010
- BLEQ 1$ ;1$ 04 15 00018
- MOVL #20, R0 ;#20, R0 50 14 D0 0001A
- RET ; 04 0001D
- 1$: INCL -4(R2) ;NUM_RETRIES 2956 FC A2 D6 0001E
- PUSHL (R2) ;MSG_NUMBER 2958 62 DD 00021
- PUSHL -36(R2) ;SEND_INIT_SIZE DC A2 DD 00023
- MOVZBL #83, -(SP) ;#83, -(SP) 7E 53 8F 9A 00026
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 0002A
- BLBS R0, 2$ ;R0, 2$ 04 50 E8 00031
- MOVL #19, R0 ;#19, R0 50 13 D0 00034
- RET ; 04 00037
- 2$: CALLS #0, G^U.26 ;#0, U.26 2964 00000000V 00 00 FB 00038
- BLBS R0, 6$ ;STATUS, 6$ 2966 28 50 E8 0003F
- CMPL R0, #134316234 ;STATUS, #134316234 2970 080180CA 8F 50 D1 00042
- BEQL 3$ ;3$ 12 13 00049
- CMPL R0, #134316248 ;STATUS, #134316248 080180D8 8F 50 D1 0004B
- BEQL 3$ ;3$ 09 13 00052
- CMPL R0, #134316178 ;STATUS, #134316178 08018092 8F 50 D1 00054
- BNEQ 4$ ;4$ 06 12 0005B
- 3$: MOVL -16(R2), R1 ;STATE, R1 2972 51 F0 A2 D0 0005D
- BRB 5$ ;5$ 03 11 00061
- 4$: MOVL #19, R1 ;#19, R1 2974 51 13 D0 00063
- 5$: MOVL R1, R0 ;R1, R0 50 51 D0 00066
- RET ; 04 00069
- 6$: CMPL 12(R2), #89 ;REC_TYPE, #89 2982 00000059 8F 0C A2 D1 0006A
- BNEQ 7$ ;7$ 06 12 00072
- CMPL 4(R2), (R2) ;REC_SEQ, MSG_NUMBER 2984 62 04 A2 D1 00074
- BEQL 8$ ;8$ 05 13 00078
- 7$: MOVL -16(R2), R0 ;STATE, R0 50 F0 A2 D0 0007A
- RET ; 04 0007E
- 8$: CALLS #0, G^U.21 ;#0, U.21 2991 00000000V 00 00 FB 0007F
- BLBS R0, 9$ ;STATUS, 9$ 04 50 E8 00086
- MOVL #10, R0 ;#10, R0 50 0A D0 00089
- RET ; 04 0008C
- 9$: MOVL -32(R2), -28(R2) ;INI_CHK_TYPE, BLK_CHK_TYPE 2993 E4 A2 E0 A2 D0 0008D
- CLRL -4(R2) ;NUM_RETRIES 2994 FC A2 D4 00092
- ADDL3 #1, (R2), R0 ;#1, MSG_NUMBER, R0 2995 62 01 C1 00095
- ; 50 00098
- EXTZV #0, #6, R0, (R2) ;#0, #6, R0, MSG_NUMBER 06 00 EF 00099
- ; 62 50 0009C
- MOVL #18, R0 ;#18, R0 2996 50 12 D0 0009E
- RET ; 04 000A1
-
- ; Routine Size: 162 bytes, Routine Base: $CODE$ + 0B26
-
-
- ; 2998 1 %SBTTL 'SEND_OPEN_FILE - Open file for sending'
- ; 2999 1 ROUTINE SEND_OPEN_FILE =
- ; 3000 1
- ; 3001 1 !++
- ; 3002 1 ! FUNCTIONAL DESCRIPTION:
- ; 3003 1 !
- ; 3004 1 ! This routine is called from DO_TRANSACTION when the first input file
- ; 3005 1 ! needs to be opened.
- ; 3006 1 !
- ; 3007 1 ! CALLING SEQUENCE:
- ; 3008 1 !
- ; 3009 1 ! STATE = SEND_OPEN_FILE ();
- ; 3010 1 !
- ; 3011 1 ! INPUT PARAMETERS:
- ; 3012 1 !
- ; 3013 1 ! None.
- ; 3014 1 !
- ; 3015 1 ! IMPLICIT INPUTS:
- ; 3016 1 !
- ; 3017 1 ! FILE_NAME, FILE_SIZE, etc.
- ; 3018 1 !
- ; 3019 1 ! OUPTUT PARAMETERS:
- ; 3020 1 !
- ; 3021 1 ! New state for FSM.
- ; 3022 1 !
- ; 3023 1 ! IMPLICIT OUTPUTS:
- ; 3024 1 !
- ; 3025 1 ! None.
- ; 3026 1 !
- ; 3027 1 ! COMPLETION CODES:
- ; 3028 1 !
- ; 3029 1 ! None.
- ; 3030 1 !
- ; 3031 1 ! SIDE EFFECTS:
- ; 3032 1 !
- ; 3033 1 ! None.
- ; 3034 1 !
- ; 3035 1 !--
- ; 3036 1
- ; 3037 2 BEGIN
- ; 3038 2
- ; 3039 2 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 3040 2 THEN
- ; 3041 3 BEGIN
- ; 3042 3 TT_TEXT (UPLIT (%ASCIZ'Sending: '));
- ; 3043 3 TT_OUTPUT ();
- ; 3044 2 END;
- ; 3045 2
- ; 3046 2 FILE_CHARS = 0; ! No characters sent yet
- ; 3047 2
- ; 3048 2 IF NOT .NO_FILE_NEEDED
- ; 3049 2 THEN
- ; 3050 2
- ; 3051 2 IF NOT FILE_OPEN (FNC_READ) THEN RETURN STATE_A ELSE FLAG_FILE_OPEN = TRUE;
- ; 3052 2
- ; 3053 2 ![023]
- ; 3054 2 ![023] If we want normalized file names, beat up the name now
- ; 3055 2 ![023]
- ; 3056 2
- ; 3057 2 IF .FIL_NORMAL_FORM THEN NORMALIZE_FILE (FILE_NAME, FILE_SIZE, -1, -1);
- ; 3058 2
- ; 3059 2 XFR_STATUS (%C'F', %C'S'); ! Inform display routine
- ; 3060 2
- ; 3061 2 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 3062 2 THEN
- ; 3063 3 BEGIN
- ; 3064 3 TT_TEXT (FILE_NAME);
- ; 3065 3 TT_OUTPUT ();
- ; 3066 2 END;
- ; 3067 2
- ; 3068 2 RETURN STATE_SF;
- ; 3069 1 END; ! End of FSM_OPEN_FILE
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAE: .ASCII \Sending: \<0><0><0> ; 3A 67 6E 69 64 6E 65 53 0003C
- ; 00 00 00 20 00044
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;SEND_OPEN_FILE
- U.5: .WORD ^M<R2,R3,R4,R5,R6> ;Save R2,R3,R4,R5,R6 2999 007C 00000
- MOVAB G^CONNECT_FLAG, R6 ;CONNECT_FLAG, R6 56 00000000G 00 9E 00002
- MOVAB G^FILE_NAME, R5 ;FILE_NAME, R5 55 00000000G 00 9E 00009
- MOVAB G^TT_OUTPUT, R4 ;TT_OUTPUT, R4 54 00000000G 00 9E 00010
- MOVAB G^TT_TEXT, R3 ;TT_TEXT, R3 53 00000000G 00 9E 00017
- MOVAB G^TY_FIL, R2 ;TY_FIL, R2 52 00000000G 00 9E 0001E
- BLBS (R6), 1$ ;CONNECT_FLAG, 1$ 3039 0F 66 E8 00025
- BLBC (R2), 1$ ;TY_FIL, 1$ 0C 62 E9 00028
- PUSHAB G^P.AAE ;P.AAE 3042 00000000' 00 9F 0002B
- CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 00031
- CALLS #0, (R4) ;#0, TT_OUTPUT 3043 64 00 FB 00034
- 1$: CLRL G^U.61 ;U.61 3046 00000000' 00 D4 00037
- BLBS G^U.63, 3$ ;U.63, 3$ 3048 17 00000000' 00 E8 0003D
- CLRL -(SP) ;-(SP) 3051 7E D4 00044
- CALLS #1, G^FILE_OPEN ;#1, FILE_OPEN 00000000G 00 01 FB 00046
- BLBS R0, 2$ ;R0, 2$ 04 50 E8 0004D
- MOVL #10, R0 ;#10, R0 50 0A D0 00050
- RET ; 04 00053
- 2$: MOVL #1, G^FLAG_FILE_OPEN ;#1, FLAG_FILE_OPEN 00000000' 00 01 D0 00054
- 3$: BLBC G^FIL_NORMAL_FORM, 4$ ;FIL_NORMAL_FORM, 4$ 3057 15 00000000G 00 E9 0005B
- MNEGL #1, -(SP) ;#1, -(SP) 7E 01 CE 00062
- MNEGL #1, -(SP) ;#1, -(SP) 7E 01 CE 00065
- PUSHAB G^FILE_SIZE ;FILE_SIZE 00000000G 00 9F 00068
- PUSHL R5 ;R5 55 DD 0006E
- CALLS #4, G^U.27 ;#4, U.27 00000000V 00 04 FB 00070
- 4$: MOVZBL #83, -(SP) ;#83, -(SP) 3059 7E 53 8F 9A 00077
- MOVZBL #70, -(SP) ;#70, -(SP) 7E 46 8F 9A 0007B
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 0007F
- BLBS (R6), 5$ ;CONNECT_FLAG, 5$ 3061 0B 66 E8 00086
- BLBC (R2), 5$ ;TY_FIL, 5$ 08 62 E9 00089
- PUSHL R5 ;R5 3064 55 DD 0008C
- CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 0008E
- CALLS #0, (R4) ;#0, TT_OUTPUT 3065 64 00 FB 00091
- 5$: MOVL #2, R0 ;#2, R0 3068 50 02 D0 00094
- RET ; 04 00097
-
- ; Routine Size: 152 bytes, Routine Base: $CODE$ + 0BC8
-
-
- ; 3070 1 %SBTTL 'SEND_GENCMD'
- ; 3071 1 ROUTINE SEND_GENCMD =
- ; 3072 1
- ; 3073 1 !++
- ; 3074 1 ! FUNCTIONAL DESCRIPTION:
- ; 3075 1 !
- ; 3076 1 ! This routine will send a command packet to the server Kermit.
- ; 3077 1 ! The new state will depend upon the response. If a send-init
- ; 3078 1 ! is received, it will process it and switch to STATE_RF.
- ; 3079 1 ! If a text-header is received it will switch to STATE_RD.
- ; 3080 1 ! If an ACK is received, it will type the data portion and
- ; 3081 1 ! switch to STATE_C.
- ; 3082 1 !
- ; 3083 1 ! CALLING SEQUENCE:
- ; 3084 1 !
- ; 3085 1 ! STATE = SEND_GENCMD();
- ; 3086 1 !
- ; 3087 1 ! INPUT PARAMETERS:
- ; 3088 1 !
- ; 3089 1 ! None.
- ; 3090 1 !
- ; 3091 1 ! IMPLICIT INPUTS:
- ; 3092 1 !
- ; 3093 1 ! GEN_TYPE - Message type to send (normally MSG_GENERIC)
- ; 3094 1 ! GEN_SUBTYPE - Message subtype (only if MSG_GENERIC)
- ; 3095 1 ! GEN_1DATA - First argument string
- ; 3096 1 ! GEN_1SIZE - Size of first argument
- ; 3097 1 ! GEN_2DATA - Second argument string
- ; 3098 1 ! GEN_2SIZE - Size of second argument
- ; 3099 1 ! GEN_3DATA - Third argument string
- ; 3100 1 ! GEN_3SIZE - Size of third argument
- ; 3101 1 !
- ; 3102 1 ! OUTPUT PARAMETERS:
- ; 3103 1 !
- ; 3104 1 ! New state for the finite state machine.
- ; 3105 1 !
- ; 3106 1 ! IMPLICIT OUTPUTS:
- ; 3107 1 !
- ; 3108 1 ! None.
- ; 3109 1 !
- ; 3110 1 ! COMPLETION CODES:
- ; 3111 1 !
- ; 3112 1 ! None.
- ; 3113 1 !
- ; 3114 1 ! SIDE EFFECTS:
- ; 3115 1 !
- ; 3116 1 ! None.
- ; 3117 1 !
- ; 3118 1 !--
- ; 3119 1
- ; 3120 2 BEGIN
- ; 3121 2
- ; 3122 2 LOCAL
- ; 3123 2 POINTER, ! Pointer at DATA_TEXT
- ; 3124 2 DATA_TEXT : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Data buffer
- ; 3125 2 DATA_SIZE, ! Length of data buffer used
- ; 3126 2 STATUS; ! Status returned by various routines
- ; 3127 2
- ; 3128 2 ROUTINE PACK_DATA (POINTER, LENGTH, SRC_ADDR, SRC_LEN) =
- ; 3129 2 !
- ; 3130 2 ! Routine to pack an argument into the buffer.
- ; 3131 2 !
- ; 3132 3 BEGIN
- ; 3133 3
- ; 3134 3 IF .SRC_LEN GTR MAX_MSG - .LENGTH - 1 THEN SRC_LEN = MAX_MSG - .LENGTH - 1;
- ; 3135 3
- ; 3136 3 LENGTH = .LENGTH + .SRC_LEN + 1;
- ; 3137 3 CH$WCHAR_A (CHAR (.SRC_LEN), .POINTER);
- ; 3138 3 .POINTER = CH$MOVE (.SRC_LEN, CH$PTR (.SRC_ADDR), ..POINTER);
- ; 3139 3 RETURN .LENGTH;
- ; 3140 2 END;
-
-
-
-
-
- ;PACK_DATA
- U.77: .WORD ^M<R2,R3,R4,R5> ;Save R2,R3,R4,R5 3128 003C 00000
- SUBL3 #1001, 8(AP), R1 ;#1001, LENGTH, R1 3134 08 AC 000003E9 8F C3 00002
- ; 51 0000A
- MNEGL R1, R0 ;R1, R0 50 51 CE 0000B
- CMPL 16(AP), R0 ;SRC_LEN, R0 50 10 AC D1 0000E
- BLEQ 1$ ;1$ 04 15 00012
- MNEGL R1, 16(AP) ;R1, SRC_LEN 10 AC 51 CE 00014
- 1$: ADDL3 16(AP), 8(AP), R0 ;SRC_LEN, LENGTH, R0 3136 08 AC 10 AC C1 00018
- ; 50 0001D
- MOVAB 1(R0), 8(AP) ;1(R0), LENGTH 08 AC 01 A0 9E 0001E
- MOVL 4(AP), R0 ;POINTER, R0 3137 50 04 AC D0 00023
- ADDB3 #32, 16(AP), @0(R0) ;#32, SRC_LEN, @0(R0) 10 AC 20 81 00027
- ; 00 B0 0002B
- INCL (R0) ;(R0) 60 D6 0002D
- MOVL @4(AP), R0 ;@POINTER, R0 3138 50 04 BC D0 0002F
- MOVC3 16(AP), @12(AP), (R0) ;SRC_LEN, @SRC_ADDR, (R0) 0C BC 10 AC 28 00033
- ; 60 00038
- MOVL R3, @4(AP) ;R3, @POINTER 04 BC 53 D0 00039
- MOVL 8(AP), R0 ;LENGTH, R0 3139 50 08 AC D0 0003D
- RET ; 04 00041
-
- ; Routine Size: 66 bytes, Routine Base: $CODE$ + 0C60
-
-
- ; 3141 2 !
- ; 3142 2 ! First determine if we have exceed the number of retries that are
- ; 3143 2 ! allowed to attempt to send this message.
- ; 3144 2 !
- ; 3145 2
- ; 3146 2 IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 3147 2
- ; 3148 2 !
- ; 3149 2 ! The number of retries are not exceeded. Increment the number and then
- ; 3150 2 ! attempt to send the packet again.
- ; 3151 2 !
- ; 3152 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 3153 2 !
- ; 3154 2 ! Build the packet data field
- ; 3155 2 !
- ; 3156 2 POINTER = CH$PTR (DATA_TEXT);
- ; 3157 2 DATA_SIZE = 0;
- ; 3158 2
- ; 3159 2 IF .GEN_TYPE EQL MSG_GENERIC
- ; 3160 2 THEN
- ; 3161 3 BEGIN
- ; 3162 3 CH$WCHAR_A (.GEN_SUBTYPE, POINTER);
- ; 3163 3 DATA_SIZE = 1;
- ; 3164 3
- ; 3165 3 IF .GEN_1SIZE GTR 0 OR .GEN_2SIZE GTR 0 OR .GEN_3SIZE GTR 0
- ; 3166 3 THEN
- ; 3167 4 BEGIN
- ; 3168 4 DATA_SIZE = PACK_DATA (POINTER, .DATA_SIZE, GEN_1DATA, .GEN_1SIZE);
- ; 3169 4
- ; 3170 4 IF .GEN_2SIZE GTR 0 OR .GEN_3SIZE GTR 0
- ; 3171 4 THEN
- ; 3172 5 BEGIN
- ; 3173 5 DATA_SIZE = PACK_DATA (POINTER, .DATA_SIZE, GEN_2DATA, .GEN_2SIZE);
- ; 3174 5
- ; 3175 5 IF .GEN_3SIZE GTR 0
- ; 3176 5 THEN
- ; 3177 6 BEGIN
- ; 3178 6 DATA_SIZE = PACK_DATA (POINTER, .DATA_SIZE, GEN_3DATA, .GEN_3SIZE);
- ; 3179 5 END;
- ; 3180 5
- ; 3181 4 END;
- ; 3182 4
- ; 3183 3 END;
- ; 3184 3
- ; 3185 3 END
- ; 3186 2 ELSE
- ; 3187 3 BEGIN
- ; 3188 3
- ; 3189 3 IF .GEN_1SIZE GTR MAX_MSG THEN GEN_1SIZE = MAX_MSG;
- ; 3190 3
- ; 3191 3 DATA_SIZE = .GEN_1SIZE;
- ; 3192 3 CH$MOVE (.GEN_1SIZE, CH$PTR (GEN_1DATA), .POINTER);
- ; 3193 2 END;
- ; 3194 2
- ; 3195 2 SET_STRING (CH$PTR (DATA_TEXT), .DATA_SIZE, TRUE);
- ; 3196 2 BFR_FILL (TRUE);
- ; 3197 2 SET_STRING (0, 0, FALSE);
- ; 3198 2 !
- ; 3199 2 ! Send the packet
- ; 3200 2 !
- ; 3201 2
- ; 3202 2 IF NOT SEND_PACKET (.GEN_TYPE, .SIZE, .MSG_NUMBER) THEN RETURN STATE_EX;
- ; 3203 2
- ; 3204 2 !
- ; 3205 2 ! Now get the responce from the remote KERMIT.
- ; 3206 2 !
- ; 3207 2 STATUS = REC_PACKET ();
- ; 3208 2
- ; 3209 2 IF NOT .STATUS
- ; 3210 2 THEN
- ; 3211 3 BEGIN
- ; 3212 3
- ; 3213 4 IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
- ; 3214 3 THEN
- ; 3215 3 RETURN .STATE
- ; 3216 3 ELSE
- ; 3217 3 RETURN STATE_EX;
- ; 3218 3
- ; 3219 2 END;
- ; 3220 2
- ; 3221 2 ! Did we get a send-init?
- ; 3222 2
- ; 3223 2 SELECTONE .REC_TYPE OF
- ; 3224 2 SET
- ; 3225 2
- ; 3226 2 [MSG_SND_INIT] :
- ; 3227 3 BEGIN
- ; 3228 3 MSG_NUMBER = .REC_SEQ; ! Initialize sequence numbers
- ; 3229 3 ! Determine if the parameters are ok. If not, give up
- ; 3230 3
- ; 3231 3 IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN .STATUS;
- ; 3232 3
- ; 3233 3 SET_SEND_INIT (); ! Set up our acknowledgement to the send-init
- ; 3234 3 SEND_PACKET (MSG_ACK, .send_init_size, .MSG_NUMBER); ! Send it
- ; 3235 3 BLK_CHK_TYPE = .INI_CHK_TYPE; ! Can now use agreed upon type
- ; 3236 3 OLD_RETRIES = .NUM_RETRIES;
- ; 3237 3 NUM_RETRIES = 0;
- ; 3238 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3239 3 RETURN STATE_RF; ! Now expect file header
- ; 3240 2 END;
- ; 3241 2
- ; 3242 2 [MSG_TEXT] :
- ; 3243 2 !
- ; 3244 2 ! If we just got a text header, set up for typing on the terminal and
- ; 3245 2 ! shift to receiving data
- ; 3246 2 !
- ; 3247 3 BEGIN
- ; 3248 3 TEXT_HEAD_FLAG = TRUE; ! We want terminal output
- ; 3249 3 PUT_CHR_ROUTINE = TYPE_CHAR; ! Set up the put a character routine
- ; 3250 3
- ; 3251 3 IF .REC_LENGTH GTR 0
- ; 3252 3 THEN
- ; 3253 4 BEGIN
- ; 3254 4 TT_TEXT (UPLIT (%ASCIZ'<<')); ! Make sure file name sticks out
- ; 3255 4 BFR_EMPTY (); ! Dump the packet data to the terminal
- ; 3256 4 TT_TEXT (UPLIT (%ASCIZ'>>')); ! So user can tell where name ends
- ; 3257 4 TT_CRLF (); ! And a CRLF
- ; 3258 3 END;
- ; 3259 3
- ; 3260 3 SEND_PACKET (MSG_ACK, 0, .MSG_NUMBER); ! Send an ACK
- ; 3261 3 OLD_RETRIES = .NUM_RETRIES;
- ; 3262 3 NUM_RETRIES = 0;
- ; 3263 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3264 3 RETURN STATE_RD; ! We now want data
- ; 3265 2 END;
- ; 3266 2
- ; 3267 2 [MSG_ACK] :
- ; 3268 2 !
- ; 3269 2 ! If we get an ACK, just type the data on the terminal and complete the
- ; 3270 2 ! transaction.
- ; 3271 2 !
- ; 3272 3 BEGIN
- ; 3273 3 PUT_CHR_ROUTINE = TYPE_CHAR; ! Dump to terminal
- ; 3274 3 BFR_EMPTY (); ! Do it
- ; 3275 3
- ; 3276 3 IF .REC_LENGTH GTR 0 THEN TT_CRLF ();
- ; 3277 3
- ; 3278 3 RETURN STATE_C; ! And go idle
- ; 3279 2 END;
- ; 3280 2
- ; 3281 2 [MSG_NAK] :
- ; 3282 2 !
- ; 3283 2 ! If we get a NAK, stay in the same state. We will re-transmit the
- ; 3284 2 ! packet again.
- ; 3285 2 !
- ; 3286 2 RETURN .STATE;
- ; 3287 2 TES;
- ; 3288 2
- ; 3289 2 !
- ; 3290 2 ! If we get here, we didn't get anything resembling an acceptable
- ; 3291 2 ! packet, so we will abort.
- ; 3292 2 !
- ; 3293 2 KRM_ERROR (KER_PROTOERR);
- ; 3294 2 RETURN STATE_A;
- ; 3295 1 END;
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAF: .ASCII \<<\<0><0> ; 00 00 3C 3C 00048
- P.AAG: .ASCII \>>\<0><0> ; 00 00 3E 3E 0004C
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;SEND_GENCMD
- U.6: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,- 3071 0FFC 00000
- R11> ;R11
- MOVAB G^U.24, R11 ;U.24, R11 5B 00000000V 00 9E 00002
- MOVAB B^U.77, R10 ;U.77, R10 5A B2 AF 9E 00009
- MOVAB G^GEN_3SIZE, R9 ;GEN_3SIZE, R9 59 00000000G 00 9E 0000D
- MOVAB G^GEN_1SIZE, R8 ;GEN_1SIZE, R8 58 00000000G 00 9E 00014
- MOVAB G^U.55, R7 ;U.55, R7 57 00000000' 00 9E 0001B
- MOVAB -1008(SP), SP ;-1008(SP), SP 5E FC10 CE 9E 00022
- CMPL -4(R7), G^PKT_RETRIES ;NUM_RETRIES, PKT_RETRIES 3146 00000000G 00 FC A7 D1 00027
- BLEQ 1$ ;1$ 04 15 0002F
- MOVL #20, R0 ;#20, R0 50 14 D0 00031
- RET ; 04 00034
- 1$: INCL -4(R7) ;NUM_RETRIES 3152 FC A7 D6 00035
- MOVAB 4(SP), (SP) ;DATA_TEXT, POINTER 3156 6E 04 AE 9E 00038
- CLRL R6 ;DATA_SIZE 3157 56 D4 0003C
- MOVL (R8), R0 ;GEN_1SIZE, R0 3165 50 68 D0 0003E
- CMPL 2040(R7), #71 ;GEN_TYPE, #71 3159 00000047 8F 07F8 C7 D1 00041
- BNEQ 4$ ;4$ 68 12 0004A
- MOVB 2044(R7), @0(SP) ;GEN_SUBTYPE, @POINTER 3162 00 BE 07FC C7 90 0004C
- INCL (SP) ;POINTER 6E D6 00052
- MOVL #1, R6 ;#1, DATA_SIZE 3163 56 01 D0 00054
- TSTL R0 ;R0 3165 50 D5 00057
- BGTR 2$ ;2$ 0C 14 00059
- TSTL G^GEN_2SIZE ;GEN_2SIZE 00000000G 00 D5 0005B
- BGTR 2$ ;2$ 04 14 00061
- TSTL (R9) ;GEN_3SIZE 69 D5 00063
- BLEQ 6$ ;6$ 6A 15 00065
- 2$: PUSHL R0 ;R0 3168 50 DD 00067
- PUSHAB G^GEN_1DATA ;GEN_1DATA 00000000G 00 9F 00069
- PUSHL R6 ;DATA_SIZE 56 DD 0006F
- PUSHAB 12(SP) ;POINTER 0C AE 9F 00071
- CALLS #4, (R10) ;#4, PACK_DATA 6A 04 FB 00074
- MOVL R0, R6 ;R0, DATA_SIZE 56 50 D0 00077
- MOVL G^GEN_2SIZE, R0 ;GEN_2SIZE, R0 3170 50 00000000G 00 D0 0007A
- BGTR 3$ ;3$ 04 14 00081
- TSTL (R9) ;GEN_3SIZE 69 D5 00083
- BLEQ 6$ ;6$ 4A 15 00085
- 3$: PUSHL R0 ;R0 3173 50 DD 00087
- PUSHAB G^GEN_2DATA ;GEN_2DATA 00000000G 00 9F 00089
- PUSHL R6 ;DATA_SIZE 56 DD 0008F
- PUSHAB 12(SP) ;POINTER 0C AE 9F 00091
- CALLS #4, (R10) ;#4, PACK_DATA 6A 04 FB 00094
- MOVL R0, R6 ;R0, DATA_SIZE 56 50 D0 00097
- MOVL (R9), R0 ;GEN_3SIZE, R0 3175 50 69 D0 0009A
- BLEQ 6$ ;6$ 32 15 0009D
- PUSHL R0 ;R0 3178 50 DD 0009F
- PUSHAB G^GEN_3DATA ;GEN_3DATA 00000000G 00 9F 000A1
- PUSHL R6 ;DATA_SIZE 56 DD 000A7
- PUSHAB 12(SP) ;POINTER 0C AE 9F 000A9
- CALLS #4, (R10) ;#4, PACK_DATA 6A 04 FB 000AC
- MOVL R0, R6 ;R0, DATA_SIZE 56 50 D0 000AF
- BRB 6$ ;6$ 1D 11 000B2
- 4$: CMPL R0, #1002 ;R0, #1002 3189 000003EA 8F 50 D1 000B4
- BLEQ 5$ ;5$ 05 15 000BB
- MOVZWL #1002, (R8) ;#1002, GEN_1SIZE 68 03EA 8F 3C 000BD
- 5$: MOVL (R8), R0 ;GEN_1SIZE, R0 3191 50 68 D0 000C2
- MOVL R0, R6 ;R0, DATA_SIZE 56 50 D0 000C5
- MOVC3 R0, G^GEN_1DATA, @0(SP) ;R0, GEN_1DATA, @POINTER 3192 00000000G 00 50 28 000C8
- ; 00 BE 000CF
- 6$: PUSHL #1 ;#1 3195 01 DD 000D1
- PUSHL R6 ;DATA_SIZE 56 DD 000D3
- PUSHAB 12(SP) ;DATA_TEXT 0C AE 9F 000D5
- CALLS #3, G^U.30 ;#3, U.30 00000000V 00 03 FB 000D8
- PUSHL #1 ;#1 3196 01 DD 000DF
- CALLS #1, G^U.29 ;#1, U.29 00000000V 00 01 FB 000E1
- CLRQ -(SP) ;-(SP) 3197 7E 7C 000E8
- CLRL -(SP) ;-(SP) 7E D4 000EA
- CALLS #3, G^U.30 ;#3, U.30 00000000V 00 03 FB 000EC
- PUSHL (R7) ;MSG_NUMBER 3202 67 DD 000F3
- PUSHL -12(R7) ;SIZE F4 A7 DD 000F5
- PUSHL 2040(R7) ;GEN_TYPE 07F8 C7 DD 000F8
- CALLS #3, (R11) ;#3, SEND_PACKET 6B 03 FB 000FC
- BLBS R0, 7$ ;R0, 7$ 04 50 E8 000FF
- MOVL #19, R0 ;#19, R0 50 13 D0 00102
- RET ; 04 00105
- 7$: CALLS #0, G^U.26 ;#0, U.26 3207 00000000V 00 00 FB 00106
- BLBS R0, 11$ ;STATUS, 11$ 3209 28 50 E8 0010D
- CMPL R0, #134316234 ;STATUS, #134316234 3213 080180CA 8F 50 D1 00110
- BEQL 8$ ;8$ 12 13 00117
- CMPL R0, #134316248 ;STATUS, #134316248 080180D8 8F 50 D1 00119
- BEQL 8$ ;8$ 09 13 00120
- CMPL R0, #134316178 ;STATUS, #134316178 08018092 8F 50 D1 00122
- BNEQ 9$ ;9$ 06 12 00129
- 8$: MOVL -16(R7), R1 ;STATE, R1 3215 51 F0 A7 D0 0012B
- BRB 10$ ;10$ 03 11 0012F
- 9$: MOVL #19, R1 ;#19, R1 3217 51 13 D0 00131
- 10$: MOVL R1, R0 ;R1, R0 50 51 D0 00134
- RET ; 04 00137
- 11$: MOVL 12(R7), R1 ;REC_TYPE, R1 3223 51 0C A7 D0 00138
- CMPL R1, #83 ;R1, #83 3226 00000053 8F 51 D1 0013C
- BNEQ 13$ ;13$ 3C 12 00143
- MOVL 4(R7), (R7) ;REC_SEQ, MSG_NUMBER 3228 67 04 A7 D0 00145
- CALLS #0, G^U.21 ;#0, U.21 3231 00000000V 00 00 FB 00149
- BLBS R0, 12$ ;STATUS, 12$ 01 50 E8 00150
- RET ; 04 00153
- 12$: CALLS #0, G^U.20 ;#0, U.20 3233 00000000V 00 00 FB 00154
- PUSHL (R7) ;MSG_NUMBER 3234 67 DD 0015B
- PUSHL -36(R7) ;SEND_INIT_SIZE DC A7 DD 0015D
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 00160
- CALLS #3, (R11) ;#3, SEND_PACKET 6B 03 FB 00164
- MOVL -32(R7), -28(R7) ;INI_CHK_TYPE, BLK_CHK_TYPE 3235 E4 A7 E0 A7 D0 00167
- MOVL -4(R7), -8(R7) ;NUM_RETRIES, OLD_RETRIES 3236 F8 A7 FC A7 D0 0016C
- CLRL -4(R7) ;NUM_RETRIES 3237 FC A7 D4 00171
- ADDL3 #1, (R7), R0 ;#1, MSG_NUMBER, R0 3238 67 01 C1 00174
- ; 50 00177
- EXTZV #0, #6, R0, (R7) ;#0, #6, R0, MSG_NUMBER 06 00 EF 00178
- ; 67 50 0017B
- MOVL #7, R0 ;#7, R0 3239 50 07 D0 0017D
- RET ; 04 00180
- 13$: CMPL R1, #88 ;R1, #88 3242 00000058 8F 51 D1 00181
- BNEQ 15$ ;15$ 5B 12 00188
- MOVL #1, 2028(R7) ;#1, TEXT_HEAD_FLAG 3248 07EC C7 01 D0 0018A
- MOVAB G^U.31, 2052(R7) ;U.31, PUT_CHR_ROUTINE 3249 0804 C7 00000000V 00 9E 0018F
- TSTL 8(R7) ;REC_LENGTH 3251 08 A7 D5 00198
- BLEQ 14$ ;14$ 28 15 0019B
- PUSHAB G^P.AAF ;P.AAF 3254 00000000' 00 9F 0019D
- CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 001A3
- CALLS #0, G^U.28 ;#0, U.28 3255 00000000V 00 00 FB 001AA
- PUSHAB G^P.AAG ;P.AAG 3256 00000000' 00 9F 001B1
- CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 001B7
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 3257 00000000G 00 00 FB 001BE
- 14$: PUSHL (R7) ;MSG_NUMBER 3260 67 DD 001C5
- CLRL -(SP) ;-(SP) 7E D4 001C7
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 001C9
- CALLS #3, (R11) ;#3, SEND_PACKET 6B 03 FB 001CD
- MOVL -4(R7), -8(R7) ;NUM_RETRIES, OLD_RETRIES 3261 F8 A7 FC A7 D0 001D0
- CLRL -4(R7) ;NUM_RETRIES 3262 FC A7 D4 001D5
- ADDL3 #1, (R7), R0 ;#1, MSG_NUMBER, R0 3263 67 01 C1 001D8
- ; 50 001DB
- EXTZV #0, #6, R0, (R7) ;#0, #6, R0, MSG_NUMBER 06 00 EF 001DC
- ; 67 50 001DF
- MOVL #8, R0 ;#8, R0 3264 50 08 D0 001E1
- RET ; 04 001E4
- 15$: CMPL R1, #89 ;R1, #89 3267 00000059 8F 51 D1 001E5
- BNEQ 17$ ;17$ 20 12 001EC
- MOVAB G^U.31, 2052(R7) ;U.31, PUT_CHR_ROUTINE 3273 0804 C7 00000000V 00 9E 001EE
- CALLS #0, G^U.28 ;#0, U.28 3274 00000000V 00 00 FB 001F7
- TSTL 8(R7) ;REC_LENGTH 3276 08 A7 D5 001FE
- BLEQ 16$ ;16$ 07 15 00201
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 00000000G 00 00 FB 00203
- 16$: MOVL #9, R0 ;#9, R0 3278 50 09 D0 0020A
- RET ; 04 0020D
- 17$: CMPL R1, #78 ;R1, #78 3281 0000004E 8F 51 D1 0020E
- BNEQ 18$ ;18$ 05 12 00215
- MOVL -16(R7), R0 ;STATE, R0 3286 50 F0 A7 D0 00217
- RET ; 04 0021B
- 18$: PUSHL #134316226 ;#134316226 3293 080180C2 8F DD 0021C
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 00222
- MOVL #10, R0 ;#10, R0 3294 50 0A D0 00229
- RET ; 04 0022C
-
- ; Routine Size: 557 bytes, Routine Base: $CODE$ + 0CA2
-
-
- ; 3296 1 %SBTTL 'SEND_BREAK'
- ; 3297 1 ROUTINE SEND_BREAK =
- ; 3298 1
- ; 3299 1 !++
- ; 3300 1 ! FUNCTIONAL DESCRIPTION:
- ; 3301 1 !
- ; 3302 1 ! This routine will send the break (end of transmission) message
- ; 3303 1 ! to the remote KERMIT. On an ACK the state becomes STATE_C.
- ; 3304 1 !
- ; 3305 1 ! CALLING SEQUENCE:
- ; 3306 1 !
- ; 3307 1 ! STATE = SEND_BREAK();
- ; 3308 1 !
- ; 3309 1 ! INPUT PARAMETERS:
- ; 3310 1 !
- ; 3311 1 ! None.
- ; 3312 1 !
- ; 3313 1 ! IMPLICIT INPUTS:
- ; 3314 1 !
- ; 3315 1 ! None.
- ; 3316 1 !
- ; 3317 1 ! OUTPUT PARAMETERS:
- ; 3318 1 !
- ; 3319 1 ! New state for the finite state machine.
- ; 3320 1 !
- ; 3321 1 ! IMPLICIT OUTPUTS:
- ; 3322 1 !
- ; 3323 1 ! None.
- ; 3324 1 !
- ; 3325 1 ! COMPLETION CODES:
- ; 3326 1 !
- ; 3327 1 ! None.
- ; 3328 1 !
- ; 3329 1 ! SIDE EFFECTS:
- ; 3330 1 !
- ; 3331 1 ! None.
- ; 3332 1 !
- ; 3333 1 !--
- ; 3334 1
- ; 3335 2 BEGIN
- ; 3336 2
- ; 3337 2 LOCAL
- ; 3338 2 STATUS; ! Status returned by various routines
- ; 3339 2
- ; 3340 2 !
- ; 3341 2 ! First determine if we have exceed the number of retries that are
- ; 3342 2 ! allowed to attempt to send this message.
- ; 3343 2 !
- ; 3344 2
- ; 3345 2 IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 3346 2
- ; 3347 2 !
- ; 3348 2 ! The number of retries are not exceeded. Increment the number and then
- ; 3349 2 ! attempt to send the packet again.
- ; 3350 2 !
- ; 3351 2 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 3352 2
- ; 3353 2 IF NOT SEND_PACKET (MSG_BREAK, 0, .MSG_NUMBER) THEN RETURN STATE_EX;
- ; 3354 2
- ; 3355 2 !
- ; 3356 2 ! Now get the responce from the remote KERMIT.
- ; 3357 2 !
- ; 3358 2 STATUS = REC_PACKET ();
- ; 3359 2
- ; 3360 2 IF NOT .STATUS
- ; 3361 2 THEN
- ; 3362 3 BEGIN
- ; 3363 3
- ; 3364 4 IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
- ; 3365 3 THEN
- ; 3366 3 RETURN .STATE
- ; 3367 3 ELSE
- ; 3368 3 RETURN STATE_EX;
- ; 3369 3
- ; 3370 2 END;
- ; 3371 2
- ; 3372 2 !
- ; 3373 2 ! Determine if the packet is good.
- ; 3374 2 !
- ; 3375 2
- ; 3376 3 IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
- ; 3377 2 THEN
- ; 3378 3 BEGIN
- ; 3379 3 KRM_ERROR (KER_PROTOERR);
- ; 3380 3 RETURN STATE_A;
- ; 3381 2 END;
- ; 3382 2
- ; 3383 2 !
- ; 3384 2 ! If this is a NAK and the message number is not the one we just send
- ; 3385 2 ! treat this like an ACK, otherwise resend the last packet.
- ; 3386 2 !
- ; 3387 2
- ; 3388 2 IF .REC_TYPE EQL MSG_NAK AND .REC_SEQ NEQ 0 THEN RETURN .STATE;
- ; 3389 2
- ; 3390 2 IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
- ; 3391 2
- ; 3392 2 !
- ; 3393 2 ! Here to determine if there is another file to send.
- ; 3394 2 !
- ; 3395 2 NUM_RETRIES = 0;
- ; 3396 2 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3397 2 RETURN STATE_C;
- ; 3398 1 END;
-
-
-
-
-
- ;SEND_BREAK
- U.9: .WORD ^M<R2> ;Save R2 3297 0004 00000
- MOVAB G^U.55, R2 ;U.55, R2 52 00000000' 00 9E 00002
- CMPL -4(R2), G^PKT_RETRIES ;NUM_RETRIES, PKT_RETRIES 3345 00000000G 00 FC A2 D1 00009
- BLEQ 1$ ;1$ 04 15 00011
- MOVL #20, R0 ;#20, R0 50 14 D0 00013
- RET ; 04 00016
- 1$: INCL -4(R2) ;NUM_RETRIES 3351 FC A2 D6 00017
- PUSHL (R2) ;MSG_NUMBER 3353 62 DD 0001A
- CLRL -(SP) ;-(SP) 7E D4 0001C
- MOVZBL #66, -(SP) ;#66, -(SP) 7E 42 8F 9A 0001E
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 00022
- BLBC R0, 2$ ;R0, 2$ 25 50 E9 00029
- CALLS #0, G^U.26 ;#0, U.26 3358 00000000V 00 00 FB 0002C
- BLBS R0, 3$ ;STATUS, 3$ 3360 1F 50 E8 00033
- CMPL R0, #134316234 ;STATUS, #134316234 3364 080180CA 8F 50 D1 00036
- BEQL 6$ ;6$ 5E 13 0003D
- CMPL R0, #134316248 ;STATUS, #134316248 080180D8 8F 50 D1 0003F
- BEQL 6$ ;6$ 55 13 00046
- CMPL R0, #134316178 ;STATUS, #134316178 08018092 8F 50 D1 00048
- BEQL 6$ ;6$ 4C 13 0004F
- 2$: MOVL #19, R0 ;#19, R0 3368 50 13 D0 00051
- RET ; 04 00054
- 3$: MOVL 12(R2), R0 ;REC_TYPE, R0 3376 50 0C A2 D0 00055
- CMPL R0, #89 ;R0, #89 00000059 8F 50 D1 00059
- BEQL 4$ ;4$ 1A 13 00060
- CMPL R0, #78 ;R0, #78 0000004E 8F 50 D1 00062
- BEQL 4$ ;4$ 11 13 00069
- PUSHL #134316226 ;#134316226 3379 080180C2 8F DD 0006B
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 00071
- MOVL #10, R0 ;#10, R0 3380 50 0A D0 00078
- RET ; 04 0007B
- 4$: MOVL 12(R2), R0 ;REC_TYPE, R0 3388 50 0C A2 D0 0007C
- CMPL R0, #78 ;R0, #78 0000004E 8F 50 D1 00080
- BNEQ 5$ ;5$ 05 12 00087
- TSTL 4(R2) ;REC_SEQ 04 A2 D5 00089
- BNEQ 6$ ;6$ 0F 12 0008C
- 5$: CMPL R0, #89 ;R0, #89 3390 00000059 8F 50 D1 0008E
- BNEQ 7$ ;7$ 0B 12 00095
- CMPL 4(R2), (R2) ;REC_SEQ, MSG_NUMBER 62 04 A2 D1 00097
- BEQL 7$ ;7$ 05 13 0009B
- 6$: MOVL -16(R2), R0 ;STATE, R0 50 F0 A2 D0 0009D
- RET ; 04 000A1
- 7$: CLRL -4(R2) ;NUM_RETRIES 3395 FC A2 D4 000A2
- ADDL3 #1, (R2), R0 ;#1, MSG_NUMBER, R0 3396 62 01 C1 000A5
- ; 50 000A8
- EXTZV #0, #6, R0, (R2) ;#0, #6, R0, MSG_NUMBER 06 00 EF 000A9
- ; 62 50 000AC
- MOVL #9, R0 ;#9, R0 3397 50 09 D0 000AE
- RET ; 04 000B1
-
- ; Routine Size: 178 bytes, Routine Base: $CODE$ + 0ECF
-
-
- ; 3399 1 %SBTTL 'REC_INIT'
- ; 3400 1 ROUTINE REC_INIT =
- ; 3401 1
- ; 3402 1 !++
- ; 3403 1 ! FUNCTIONAL DESCRIPTION:
- ; 3404 1 !
- ; 3405 1 ! This routine will process an initialization message received from
- ; 3406 1 ! the remote KERMIT.
- ; 3407 1 !
- ; 3408 1 ! CALLING SEQUENCE:
- ; 3409 1 !
- ; 3410 1 ! STATE = REC_INIT();
- ; 3411 1 !
- ; 3412 1 ! INPUT PARAMETERS:
- ; 3413 1 !
- ; 3414 1 ! None.
- ; 3415 1 !
- ; 3416 1 ! IMPLICIT INPUTS:
- ; 3417 1 !
- ; 3418 1 ! None.
- ; 3419 1 !
- ; 3420 1 ! OUTPUT PARAMETERS:
- ; 3421 1 !
- ; 3422 1 ! New machine state.
- ; 3423 1 !
- ; 3424 1 ! IMPLICIT OUTPUTS:
- ; 3425 1 !
- ; 3426 1 ! None.
- ; 3427 1 !
- ; 3428 1 ! COMPLETION CODES:
- ; 3429 1 !
- ; 3430 1 ! None.
- ; 3431 1 !
- ; 3432 1 ! SIDE EFFECTS:
- ; 3433 1 !
- ; 3434 1 ! None.
- ; 3435 1 !
- ; 3436 1 !--
- ; 3437 1
- ; 3438 2 BEGIN
- ; 3439 2
- ; 3440 2 LOCAL
- ; 3441 2 STATUS; ! Status returned by various routines
- ; 3442 2
- ; 3443 2 ROUTINE CHECK_INIT =
- ; 3444 3 BEGIN
- ; 3445 3
- ; 3446 3 IF .REC_TYPE EQL MSG_SND_INIT THEN RETURN TRUE ELSE RETURN FALSE;
- ; 3447 3
- ; 3448 2 END;
-
-
-
-
-
- ;CHECK_INIT
- U.78: .WORD ^M<> ;Save nothing 3443 0000 00000
- CMPL G^U.58, #83 ;U.58, #83 3446 00000053 8F 00000000' 00 D1 00002
- BNEQ 1$ ;1$ 04 12 0000D
- MOVL #1, R0 ;#1, R0 50 01 D0 0000F
- RET ; 04 00012
- 1$: CLRL R0 ;R0 50 D4 00013
- RET ; 04 00015
-
- ; Routine Size: 22 bytes, Routine Base: $CODE$ + 0F81
-
-
- ; 3449 2
- ; 3450 3 IF NOT (STATUS = REC_MESSAGE (CHECK_INIT))
- ; 3451 2 THEN
- ; 3452 2
- ; 3453 2 IF .STATUS NEQ KER_ABORTED THEN RETURN STATE_A ELSE RETURN STATE_EX;
- ; 3454 2
- ; 3455 2 MSG_NUMBER = .REC_SEQ;
- ; 3456 2
- ; 3457 2 IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN STATE_A;
- ; 3458 2
- ; 3459 2 SET_SEND_INIT ();
- ; 3460 2 SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .MSG_NUMBER); ! [108]
- ; 3461 2 BLK_CHK_TYPE = .INI_CHK_TYPE; ! Can now use agreed upon type
- ; 3462 2 OLD_RETRIES = .NUM_RETRIES;
- ; 3463 2 NUM_RETRIES = 0;
- ; 3464 2 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3465 2 RETURN STATE_RF;
- ; 3466 1 END; ! End of REC_INIT
-
-
-
-
-
- ;REC_INIT
- U.11: .WORD ^M<R2> ;Save R2 3400 0004 00000
- MOVAB G^U.55, R2 ;U.55, R2 52 00000000' 00 9E 00002
- PUSHAB B^U.78 ;U.78 3450 DE AF 9F 00009
- CALLS #1, G^U.25 ;#1, U.25 00000000V 00 01 FB 0000C
- BLBS R0, 3$ ;STATUS, 3$ 15 50 E8 00013
- CMPL R0, #134316258 ;STATUS, #134316258 3453 080180E2 8F 50 D1 00016
- BEQL 1$ ;1$ 05 13 0001D
- MOVL #10, R1 ;#10, R1 51 0A D0 0001F
- BRB 2$ ;2$ 03 11 00022
- 1$: MOVL #19, R1 ;#19, R1 51 13 D0 00024
- 2$: MOVL R1, R0 ;R1, R0 50 51 D0 00027
- RET ; 04 0002A
- 3$: MOVL 4(R2), (R2) ;REC_SEQ, MSG_NUMBER 3455 62 04 A2 D0 0002B
- CALLS #0, G^U.21 ;#0, U.21 3457 00000000V 00 00 FB 0002F
- BLBS R0, 4$ ;STATUS, 4$ 04 50 E8 00036
- MOVL #10, R0 ;#10, R0 50 0A D0 00039
- RET ; 04 0003C
- 4$: CALLS #0, G^U.20 ;#0, U.20 3459 00000000V 00 00 FB 0003D
- PUSHL (R2) ;MSG_NUMBER 3460 62 DD 00044
- PUSHL -36(R2) ;SEND_INIT_SIZE DC A2 DD 00046
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 00049
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 0004D
- MOVL -32(R2), -28(R2) ;INI_CHK_TYPE, BLK_CHK_TYPE 3461 E4 A2 E0 A2 D0 00054
- MOVL -4(R2), -8(R2) ;NUM_RETRIES, OLD_RETRIES 3462 F8 A2 FC A2 D0 00059
- CLRL -4(R2) ;NUM_RETRIES 3463 FC A2 D4 0005E
- ADDL3 #1, (R2), R0 ;#1, MSG_NUMBER, R0 3464 62 01 C1 00061
- ; 50 00064
- EXTZV #0, #6, R0, (R2) ;#0, #6, R0, MSG_NUMBER 06 00 EF 00065
- ; 62 50 00068
- MOVL #7, R0 ;#7, R0 3465 50 07 D0 0006A
- RET ; 04 0006D
-
- ; Routine Size: 110 bytes, Routine Base: $CODE$ + 0F97
-
-
- ; 3467 1 %SBTTL 'REC_FILE'
- ; 3468 1 ROUTINE REC_FILE =
- ; 3469 1
- ; 3470 1 !++
- ; 3471 1 ! FUNCTIONAL DESCRIPTION:
- ; 3472 1 !
- ; 3473 1 ! This routine expects to receive an MSG_FILE packet from the remote
- ; 3474 1 ! KERMIT. If the message is correct this routine will change the state
- ; 3475 1 ! to STATE_RD.
- ; 3476 1 !
- ; 3477 1 ! This routine also expects MSG_SND_INIT, MSG_EOF, or MSG_BREAK.
- ; 3478 1 !
- ; 3479 1 ! CALLING SEQUENCE:
- ; 3480 1 !
- ; 3481 1 ! STATE = REC_FILE();
- ; 3482 1 !
- ; 3483 1 ! INPUT PARAMETERS:
- ; 3484 1 !
- ; 3485 1 ! None.
- ; 3486 1 !
- ; 3487 1 ! IMPLICIT INPUTS:
- ; 3488 1 !
- ; 3489 1 ! None.
- ; 3490 1 !
- ; 3491 1 ! OUTPUT PARAMETERS:
- ; 3492 1 !
- ; 3493 1 ! New state.
- ; 3494 1 !
- ; 3495 1 ! IMPLICIT OUTPUTS:
- ; 3496 1 !
- ; 3497 1 ! None.
- ; 3498 1 !
- ; 3499 1 ! COMPLETION CODES:
- ; 3500 1 !
- ; 3501 1 ! None.
- ; 3502 1 !
- ; 3503 1 ! SIDE EFFECTS:
- ; 3504 1 !
- ; 3505 1 ! None.
- ; 3506 1 !
- ; 3507 1 !--
- ; 3508 1
- ; 3509 2 BEGIN
- ; 3510 2
- ; 3511 2 LOCAL
- ; 3512 2 STATUS;
- ; 3513 2
- ; 3514 2 ROUTINE CHECK_FILE =
- ; 3515 3 BEGIN
- ; 3516 3
- ; 3517 4 IF (.REC_TYPE EQL MSG_SND_INIT) OR (.REC_TYPE EQL MSG_EOF) OR (.REC_TYPE EQL MSG_FILE) OR (
- ; 3518 4 .REC_TYPE EQL MSG_BREAK) OR (.REC_TYPE EQL MSG_TEXT)
- ; 3519 3 THEN
- ; 3520 3 RETURN TRUE
- ; 3521 3 ELSE
- ; 3522 3 RETURN FALSE;
- ; 3523 3
- ; 3524 2 END;
-
-
-
-
-
- ;CHECK_FILE
- U.79: .WORD ^M<> ;Save nothing 3514 0000 00000
- MOVL G^U.58, R0 ;U.58, R0 3517 50 00000000' 00 D0 00002
- CMPL R0, #83 ;R0, #83 00000053 8F 50 D1 00009
- BEQL 1$ ;1$ 24 13 00010
- CMPL R0, #90 ;R0, #90 0000005A 8F 50 D1 00012
- BEQL 1$ ;1$ 1B 13 00019
- CMPL R0, #70 ;R0, #70 00000046 8F 50 D1 0001B
- BEQL 1$ ;1$ 12 13 00022
- CMPL R0, #66 ;R0, #66 3518 00000042 8F 50 D1 00024
- BEQL 1$ ;1$ 09 13 0002B
- CMPL R0, #88 ;R0, #88 00000058 8F 50 D1 0002D
- BNEQ 2$ ;2$ 04 12 00034
- 1$: MOVL #1, R0 ;#1, R0 3520 50 01 D0 00036
- RET ; 04 00039
- 2$: CLRL R0 ;R0 3522 50 D4 0003A
- RET ; 04 0003C
-
- ; Routine Size: 61 bytes, Routine Base: $CODE$ + 1005
-
-
- ; 3525 2 !
- ; 3526 2 ! Initialize the abort flags
- ; 3527 2 !
- ; 3528 2 ABT_CUR_FILE = FALSE;
- ; 3529 2 ABT_ALL_FILE = FALSE;
- ; 3530 2 !
- ; 3531 2 ! Get a message
- ; 3532 2 !
- ; 3533 2
- ; 3534 3 IF NOT (STATUS = REC_MESSAGE (CHECK_FILE))
- ; 3535 2 THEN
- ; 3536 2
- ; 3537 2 IF .STATUS NEQ KER_ABORTED THEN RETURN STATE_A ELSE RETURN STATE_EX;
- ; 3538 2
- ; 3539 2 SELECTONE .REC_TYPE OF
- ; 3540 2 SET
- ; 3541 2
- ; 3542 2 [MSG_SND_INIT] :
- ; 3543 3 BEGIN
- ; 3544 3
- ; 3545 3 IF .OLD_RETRIES GTR .SI_RETRIES THEN RETURN STATE_ER;
- ; 3546 3
- ; 3547 3 OLD_RETRIES = .OLD_RETRIES + 1;
- ; 3548 3
- ; 3549 3 IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
- ; 3550 3 THEN
- ; 3551 4 BEGIN
- ; 3552 4 SET_SEND_INIT ();
- ; 3553 4 BLK_CHK_TYPE = CHK_1CHAR; ! Must use 1 character CHKSUM
- ; 3554 4 SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .REC_SEQ); ! [108]
- ; 3555 4 BLK_CHK_TYPE = .INI_CHK_TYPE; ! Back to agreed upon type
- ; 3556 4 NUM_RETRIES = 0;
- ; 3557 4 RETURN .STATE;
- ; 3558 4 END
- ; 3559 3 ELSE
- ; 3560 4 BEGIN
- ; 3561 4 KRM_ERROR (KER_PROTOERR);
- ; 3562 4 RETURN STATE_A;
- ; 3563 3 END;
- ; 3564 3
- ; 3565 2 END;
- ; 3566 2
- ; 3567 2 [MSG_EOF] :
- ; 3568 3 BEGIN
- ; 3569 3
- ; 3570 3 IF .OLD_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 3571 3
- ; 3572 3 OLD_RETRIES = .OLD_RETRIES + 1;
- ; 3573 3
- ; 3574 3 IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
- ; 3575 3 THEN
- ; 3576 4 BEGIN
- ; 3577 4 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 3578 4 NUM_RETRIES = 0;
- ; 3579 4 RETURN .STATE;
- ; 3580 4 END
- ; 3581 3 ELSE
- ; 3582 4 BEGIN
- ; 3583 4 KRM_ERROR (KER_PROTOERR);
- ; 3584 4 RETURN STATE_A;
- ; 3585 3 END;
- ; 3586 3
- ; 3587 2 END;
- ; 3588 2
- ; 3589 2 [MSG_FILE] :
- ; 3590 3 BEGIN
- ; 3591 3
- ; 3592 3 IF .MSG_NUMBER NEQ .REC_SEQ THEN RETURN STATE_ER;
- ; 3593 3
- ; 3594 3 IF .REC_LENGTH EQL 0
- ; 3595 3 THEN
- ; 3596 4 BEGIN
- ; 3597 4 KRM_ERROR (KER_PROTOERR);
- ; 3598 4 RETURN STATE_A;
- ; 3599 3 END;
- ; 3600 3
- ; 3601 3 ![025]
- ; 3602 3 ![025] Get file name from packet with all quoting undone
- ; 3603 3 ![025]
- ; 3604 3 SET_STRING (CH$PTR (FILE_NAME), MAX_FILE_NAME, TRUE);
- ; 3605 3 BFR_EMPTY ();
- ; 3606 3 FILE_SIZE = SET_STRING (0, 0, FALSE);
- ; 3607 3 CH$WCHAR (CHR_NUL, CH$PTR (FILE_NAME, .FILE_SIZE));
- ; 3608 3 ![025] FILE_SIZE = .REC_LENGTH;
- ; 3609 3 ![025] CH$COPY (.REC_LENGTH, CH$PTR (REC_MSG, PKT_MSG, CHR_SIZE), CHR_NUL, MAX_FILE_NAME,
- ; 3610 3 ![025] CH$PTR (FILE_NAME));
- ; 3611 3
- ; 3612 3 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 3613 3 THEN
- ; 3614 4 BEGIN
- ; 3615 4 TT_TEXT (UPLIT (%ASCIZ'Receiving: '));
- ; 3616 4 TT_TEXT (FILE_NAME);
- ; 3617 4 TT_OUTPUT ();
- ; 3618 3 END;
- ; 3619 3
- ; 3620 3 ![023]
- ; 3621 3 ![023] Force file name into normal form if desired
- ; 3622 3 ![023]
- ; 3623 3
- ; 3624 3 IF .FIL_NORMAL_FORM THEN NORMALIZE_FILE (FILE_NAME, FILE_SIZE, 39, 39);
- ; 3625 3
- ; 3626 3 FILE_CHARS = 0; ! No characters received yet
- ; 3627 3
- ; 3628 3 IF NOT FILE_OPEN (FNC_WRITE) THEN RETURN STATE_A;
- ; 3629 3
- ; 3630 3 XFR_STATUS (%C'F', %C'R'); ! Tell display routine
- ; 3631 3 TEXT_HEAD_FLAG = FALSE; ! Got an F, not an X
- ; 3632 3 FLAG_FILE_OPEN = TRUE;
- ; 3633 3 SEND_PACKET (MSG_ACK, 0, .MSG_NUMBER);
- ; 3634 3 OLD_RETRIES = .NUM_RETRIES;
- ; 3635 3 NUM_RETRIES = 0;
- ; 3636 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3637 3 RETURN STATE_RD;
- ; 3638 2 END;
- ; 3639 2
- ; 3640 2 [MSG_TEXT] :
- ; 3641 2 !
- ; 3642 2 ! If we get a text header, we will want to type the data on
- ; 3643 2 ! the terminal. Set up the put a character routine correctly.
- ; 3644 2 !
- ; 3645 3 BEGIN
- ; 3646 3
- ; 3647 3 IF .MSG_NUMBER NEQ .REC_SEQ
- ; 3648 3 THEN
- ; 3649 4 BEGIN
- ; 3650 4 KRM_ERROR (KER_PROTOERR);
- ; 3651 4 RETURN STATE_A;
- ; 3652 3 END;
- ; 3653 3
- ; 3654 3 TEXT_HEAD_FLAG = TRUE; ! Got an X, not an F
- ; 3655 3 PUT_CHR_ROUTINE = TYPE_CHAR; ! Empty buffer on terminal
- ; 3656 3
- ; 3657 3 IF .REC_LENGTH GTR 0
- ; 3658 3 THEN
- ; 3659 4 BEGIN
- ; 3660 4 TT_TEXT (UPLIT (%ASCIZ'<<')); ! Make file name stick out
- ; 3661 4 BFR_EMPTY (); ! Do the header data
- ; 3662 4 TT_TEXT (UPLIT (%ASCIZ'>>'));
- ; 3663 4 TT_CRLF (); ! And a crlf
- ; 3664 3 END;
- ; 3665 3
- ; 3666 3 SEND_PACKET (MSG_ACK, 0, .MSG_NUMBER);
- ; 3667 3 OLD_RETRIES = .NUM_RETRIES;
- ; 3668 3 NUM_RETRIES = 0;
- ; 3669 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3670 3 RETURN STATE_RD;
- ; 3671 2 END;
- ; 3672 2
- ; 3673 2 [MSG_BREAK] :
- ; 3674 3 BEGIN
- ; 3675 3
- ; 3676 3 IF .MSG_NUMBER NEQ .REC_SEQ
- ; 3677 3 THEN
- ; 3678 4 BEGIN
- ; 3679 4 KRM_ERROR (KER_PROTOERR);
- ; 3680 4 RETURN STATE_A;
- ; 3681 3 END;
- ; 3682 3
- ; 3683 3 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 3684 3 RETURN STATE_C;
- ; 3685 2 END;
- ; 3686 2
- ; 3687 2 [OTHERWISE] :
- ; 3688 3 BEGIN
- ; 3689 3 KRM_ERROR (KER_PROTOERR);
- ; 3690 3 RETURN STATE_A;
- ; 3691 2 END;
- ; 3692 2 TES;
- ; 3693 2
- ; 3694 1 END; ! End of REC_FILE
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAH: .ASCII \Receiving: \<0> ; 6E 69 76 69 65 63 65 52 00050
- ; 00 20 3A 67 00058
- P.AAI: .ASCII \<<\<0><0> ; 00 00 3C 3C 0005C
- P.AAJ: .ASCII \>>\<0><0> ; 00 00 3E 3E 00060
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;REC_FILE
- U.12: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9> ;Save R2,R3,R4,R5,R6,R7,R8,R9 3468 03FC 00000
- MOVAB G^FILE_SIZE, R9 ;FILE_SIZE, R9 59 00000000G 00 9E 00002
- MOVAB G^U.28, R8 ;U.28, R8 58 00000000V 00 9E 00009
- MOVAB G^U.30, R7 ;U.30, R7 57 00000000V 00 9E 00010
- MOVAB G^P.AAH, R6 ;P.AAH, R6 56 00000000' 00 9E 00017
- MOVAB G^TT_TEXT, R5 ;TT_TEXT, R5 55 00000000G 00 9E 0001E
- MOVAB G^FILE_NAME, R4 ;FILE_NAME, R4 54 00000000G 00 9E 00025
- MOVAB G^U.24, R3 ;U.24, R3 53 00000000V 00 9E 0002C
- MOVAB G^U.55, R2 ;U.55, R2 52 00000000' 00 9E 00033
- CLRL G^ABT_CUR_FILE ;ABT_CUR_FILE 3528 00000000G 00 D4 0003A
- CLRL G^ABT_ALL_FILE ;ABT_ALL_FILE 3529 00000000G 00 D4 00040
- PUSHAB W^U.79 ;U.79 3534 FF79 CF 9F 00046
- CALLS #1, G^U.25 ;#1, U.25 00000000V 00 01 FB 0004A
- BLBS R0, 2$ ;STATUS, 2$ 10 50 E8 00051
- CMPL R0, #134316258 ;STATUS, #134316258 3537 080180E2 8F 50 D1 00054
- BEQL 1$ ;1$ 03 13 0005B
- BRW 18$ ;18$ 01A2 31 0005D
- 1$: MOVL #19, R0 ;#19, R0 50 13 D0 00060
- RET ; 04 00063
- 2$: MOVL 12(R2), R0 ;REC_TYPE, R0 3539 50 0C A2 D0 00064
- CMPL R0, #83 ;R0, #83 3542 00000053 8F 50 D1 00068
- BNEQ 3$ ;3$ 38 12 0006F
- CMPL -8(R2), G^SI_RETRIES ;OLD_RETRIES, SI_RETRIES 3545 00000000G 00 F8 A2 D1 00071
- BGTR 7$ ;7$ 78 14 00079
- INCL -8(R2) ;OLD_RETRIES 3547 F8 A2 D6 0007B
- SUBL3 #1, (R2), R0 ;#1, MSG_NUMBER, R0 3549 62 01 C3 0007E
- ; 50 00081
- CMPZV #0, #6, R0, 4(R2) ;#0, #6, R0, REC_SEQ 06 00 ED 00082
- ; 04 A2 50 00085
- BNEQ 9$ ;9$ 72 12 00088
- CALLS #0, G^U.20 ;#0, U.20 3552 00000000V 00 00 FB 0008A
- MOVL #49, -28(R2) ;#49, BLK_CHK_TYPE 3553 E4 A2 31 D0 00091
- PUSHL 4(R2) ;REC_SEQ 3554 04 A2 DD 00095
- PUSHL -36(R2) ;SEND_INIT_SIZE DC A2 DD 00098
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 0009B
- CALLS #3, (R3) ;#3, SEND_PACKET 63 03 FB 0009F
- MOVL -32(R2), -28(R2) ;INI_CHK_TYPE, BLK_CHK_TYPE 3555 E4 A2 E0 A2 D0 000A2
- BRB 4$ ;4$ 3556 30 11 000A7
- 3$: CMPL R0, #90 ;R0, #90 3567 0000005A 8F 50 D1 000A9
- BNEQ 5$ ;5$ 2F 12 000B0
- CMPL -8(R2), G^PKT_RETRIES ;OLD_RETRIES, PKT_RETRIES 3570 00000000G 00 F8 A2 D1 000B2
- BGTR 7$ ;7$ 37 14 000BA
- INCL -8(R2) ;OLD_RETRIES 3572 F8 A2 D6 000BC
- SUBL3 #1, (R2), R1 ;#1, MSG_NUMBER, R1 3574 62 01 C3 000BF
- ; 51 000C2
- MOVL 4(R2), R0 ;REC_SEQ, R0 50 04 A2 D0 000C3
- CMPZV #0, #6, R1, R0 ;#0, #6, R1, R0 06 00 ED 000C7
- ; 50 51 000CA
- BNEQ 9$ ;9$ 2E 12 000CC
- PUSHL R0 ;R0 3577 50 DD 000CE
- CLRL -(SP) ;-(SP) 7E D4 000D0
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 000D2
- CALLS #3, (R3) ;#3, SEND_PACKET 63 03 FB 000D6
- 4$: CLRL -4(R2) ;NUM_RETRIES 3578 FC A2 D4 000D9
- MOVL -16(R2), R0 ;STATE, R0 3579 50 F0 A2 D0 000DC
- RET ; 04 000E0
- 5$: CMPL R0, #70 ;R0, #70 3589 00000046 8F 50 D1 000E1
- BEQL 6$ ;6$ 03 13 000E8
- BRW 14$ ;14$ 0091 31 000EA
- 6$: CMPL (R2), 4(R2) ;MSG_NUMBER, REC_SEQ 3592 04 A2 62 D1 000ED
- BEQL 8$ ;8$ 04 13 000F1
- 7$: MOVL #20, R0 ;#20, R0 50 14 D0 000F3
- RET ; 04 000F6
- 8$: TSTL 8(R2) ;REC_LENGTH 3594 08 A2 D5 000F7
- BNEQ 10$ ;10$ 03 12 000FA
- 9$: BRW 17$ ;17$ 00F6 31 000FC
- 10$: PUSHL #1 ;#1 3604 01 DD 000FF
- MOVZBL #132, -(SP) ;#132, -(SP) 7E 84 8F 9A 00101
- PUSHL R4 ;R4 54 DD 00105
- CALLS #3, (R7) ;#3, SET_STRING 67 03 FB 00107
- CALLS #0, (R8) ;#0, BFR_EMPTY 3605 68 00 FB 0010A
- CLRQ -(SP) ;-(SP) 3606 7E 7C 0010D
- CLRL -(SP) ;-(SP) 7E D4 0010F
- CALLS #3, (R7) ;#3, SET_STRING 67 03 FB 00111
- MOVL R0, (R9) ;R0, FILE_SIZE 69 50 D0 00114
- CLRB (R4)[R0] ;FILE_NAME[R0] 3607 6440 94 00117
- BLBS G^CONNECT_FLAG, 11$ ;CONNECT_FLAG, 11$ 3612 18 00000000G 00 E8 0011A
- BLBC G^TY_FIL, 11$ ;TY_FIL, 11$ 11 00000000G 00 E9 00121
- PUSHL R6 ;R6 3615 56 DD 00128
- CALLS #1, (R5) ;#1, TT_TEXT 65 01 FB 0012A
- PUSHL R4 ;R4 3616 54 DD 0012D
- CALLS #1, (R5) ;#1, TT_TEXT 65 01 FB 0012F
- CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 3617 00000000G 00 00 FB 00132
- 11$: BLBC G^FIL_NORMAL_FORM, 12$ ;FIL_NORMAL_FORM, 12$ 3624 0F 00000000G 00 E9 00139
- PUSHL #39 ;#39 27 DD 00140
- PUSHL #39 ;#39 27 DD 00142
- PUSHR #^M<R4,R9> ;#^M<R4,R9> 0210 8F BB 00144
- CALLS #4, G^U.27 ;#4, U.27 00000000V 00 04 FB 00148
- 12$: CLRL 2024(R2) ;FILE_CHARS 3626 07E8 C2 D4 0014F
- PUSHL #1 ;#1 3628 01 DD 00153
- CALLS #1, G^FILE_OPEN ;#1, FILE_OPEN 00000000G 00 01 FB 00155
- BLBS R0, 13$ ;R0, 13$ 03 50 E8 0015C
- BRW 18$ ;18$ 00A0 31 0015F
- 13$: MOVZBL #82, -(SP) ;#82, -(SP) 3630 7E 52 8F 9A 00162
- MOVZBL #70, -(SP) ;#70, -(SP) 7E 46 8F 9A 00166
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 0016A
- CLRL 2028(R2) ;TEXT_HEAD_FLAG 3631 07EC C2 D4 00171
- MOVL #1, G^FLAG_FILE_OPEN ;#1, FLAG_FILE_OPEN 3632 00000000' 00 01 D0 00175
- BRB 15$ ;15$ 3633 38 11 0017C
- 14$: CMPL R0, #88 ;R0, #88 3640 00000058 8F 50 D1 0017E
- BNEQ 16$ ;16$ 4F 12 00185
- CMPL (R2), 4(R2) ;MSG_NUMBER, REC_SEQ 3647 04 A2 62 D1 00187
- BNEQ 17$ ;17$ 68 12 0018B
- MOVL #1, 2028(R2) ;#1, TEXT_HEAD_FLAG 3654 07EC C2 01 D0 0018D
- MOVAB G^U.31, 2052(R2) ;U.31, PUT_CHR_ROUTINE 3655 0804 C2 00000000V 00 9E 00192
- TSTL 8(R2) ;REC_LENGTH 3657 08 A2 D5 0019B
- BLEQ 15$ ;15$ 16 15 0019E
- PUSHAB 12(R6) ;P.AAI 3660 0C A6 9F 001A0
- CALLS #1, (R5) ;#1, TT_TEXT 65 01 FB 001A3
- CALLS #0, (R8) ;#0, BFR_EMPTY 3661 68 00 FB 001A6
- PUSHAB 16(R6) ;P.AAJ 3662 10 A6 9F 001A9
- CALLS #1, (R5) ;#1, TT_TEXT 65 01 FB 001AC
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 3663 00000000G 00 00 FB 001AF
- 15$: PUSHL (R2) ;MSG_NUMBER 3666 62 DD 001B6
- CLRL -(SP) ;-(SP) 7E D4 001B8
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 001BA
- CALLS #3, (R3) ;#3, SEND_PACKET 63 03 FB 001BE
- MOVL -4(R2), -8(R2) ;NUM_RETRIES, OLD_RETRIES 3667 F8 A2 FC A2 D0 001C1
- CLRL -4(R2) ;NUM_RETRIES 3668 FC A2 D4 001C6
- ADDL3 #1, (R2), R0 ;#1, MSG_NUMBER, R0 3669 62 01 C1 001C9
- ; 50 001CC
- EXTZV #0, #6, R0, (R2) ;#0, #6, R0, MSG_NUMBER 06 00 EF 001CD
- ; 62 50 001D0
- MOVL #8, R0 ;#8, R0 3670 50 08 D0 001D2
- RET ; 04 001D5
- 16$: CMPL R0, #66 ;R0, #66 3673 00000042 8F 50 D1 001D6
- BNEQ 17$ ;17$ 16 12 001DD
- CMPL (R2), 4(R2) ;MSG_NUMBER, REC_SEQ 3676 04 A2 62 D1 001DF
- BNEQ 17$ ;17$ 10 12 001E3
- PUSHL 4(R2) ;REC_SEQ 3683 04 A2 DD 001E5
- CLRL -(SP) ;-(SP) 7E D4 001E8
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 001EA
- CALLS #3, (R3) ;#3, SEND_PACKET 63 03 FB 001EE
- MOVL #9, R0 ;#9, R0 3684 50 09 D0 001F1
- RET ; 04 001F4
- 17$: PUSHL #134316226 ;#134316226 3689 080180C2 8F DD 001F5
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 001FB
- 18$: MOVL #10, R0 ;#10, R0 3690 50 0A D0 00202
- RET ; 04 00205
-
- ; Routine Size: 518 bytes, Routine Base: $CODE$ + 1042
-
-
- ; 3695 1 %SBTTL 'REC_DATA'
- ; 3696 1 ROUTINE REC_DATA =
- ; 3697 1
- ; 3698 1 !++
- ; 3699 1 ! FUNCTIONAL DESCRIPTION:
- ; 3700 1 !
- ; 3701 1 ! This routine will accept data messages and write them to disk.
- ; 3702 1 ! It will also accept MSG_FILE, MSG_TEXT and MSG_EOF messages.
- ; 3703 1 !
- ; 3704 1 ! CALLING SEQUENCE:
- ; 3705 1 !
- ; 3706 1 ! STATE = REC_DATA();
- ; 3707 1 !
- ; 3708 1 ! INPUT PARAMETERS:
- ; 3709 1 !
- ; 3710 1 ! None.
- ; 3711 1 !
- ; 3712 1 ! IMPLICIT INPUTS:
- ; 3713 1 !
- ; 3714 1 ! None.
- ; 3715 1 !
- ; 3716 1 ! OUTPUT PARAMETERS:
- ; 3717 1 !
- ; 3718 1 ! New state for the finite state machine.
- ; 3719 1 !
- ; 3720 1 ! IMPLICIT OUTPUTS:
- ; 3721 1 !
- ; 3722 1 ! None.
- ; 3723 1 !
- ; 3724 1 ! COMPLETION CODES:
- ; 3725 1 !
- ; 3726 1 ! None.
- ; 3727 1 !
- ; 3728 1 ! SIDE EFFECTS:
- ; 3729 1 !
- ; 3730 1 ! None.
- ; 3731 1 !
- ; 3732 1 !--
- ; 3733 1
- ; 3734 2 BEGIN
- ; 3735 2
- ; 3736 2 LOCAL
- ; 3737 2 STATUS;
- ; 3738 2
- ; 3739 2 ROUTINE CHECK_DATA =
- ; 3740 3 BEGIN
- ; 3741 3
- ; 3742 3 IF .REC_TYPE EQL MSG_DATA OR (.REC_TYPE EQL MSG_FILE AND NOT .TEXT_HEAD_FLAG) OR .REC_TYPE
- ; 3743 4 EQL MSG_EOF OR (.REC_TYPE EQL MSG_TEXT AND .TEXT_HEAD_FLAG)
- ; 3744 3 THEN
- ; 3745 3 RETURN TRUE
- ; 3746 3 ELSE
- ; 3747 3 RETURN FALSE;
- ; 3748 3
- ; 3749 2 END;
-
-
-
-
-
- ;CHECK_DATA
- U.80: .WORD ^M<R2> ;Save R2 3739 0004 00000
- MOVAB G^U.62, R2 ;U.62, R2 52 00000000' 00 9E 00002
- MOVL -2016(R2), R0 ;REC_TYPE, R0 3742 50 F820 C2 D0 00009
- CMPL R0, #68 ;R0, #68 00000044 8F 50 D1 0000E
- BEQL 2$ ;2$ 21 13 00015
- CMPL R0, #70 ;R0, #70 00000046 8F 50 D1 00017
- BNEQ 1$ ;1$ 03 12 0001E
- BLBC (R2), 2$ ;TEXT_HEAD_FLAG, 2$ 15 62 E9 00020
- 1$: CMPL R0, #90 ;R0, #90 3743 0000005A 8F 50 D1 00023
- BEQL 2$ ;2$ 0C 13 0002A
- CMPL R0, #88 ;R0, #88 00000058 8F 50 D1 0002C
- BNEQ 3$ ;3$ 07 12 00033
- BLBC (R2), 3$ ;TEXT_HEAD_FLAG, 3$ 04 62 E9 00035
- 2$: MOVL #1, R0 ;#1, R0 3745 50 01 D0 00038
- RET ; 04 0003B
- 3$: CLRL R0 ;R0 3747 50 D4 0003C
- RET ; 04 0003E
-
- ; Routine Size: 63 bytes, Routine Base: $CODE$ + 1248
-
-
- ; 3750 2
- ; 3751 2 LOCAL
- ; 3752 2 SUB_TYPE, ! Subtype for XFR_STATUS
- ; 3753 2 DISCARD_FILE_FLAG, ! Sender requested discard
- ; 3754 2 ACK_MSG_LEN; ! Length of ACK to send
- ; 3755 2
- ; 3756 2 !
- ; 3757 2 ! First get a message
- ; 3758 2 !
- ; 3759 2
- ; 3760 3 IF NOT (STATUS = REC_MESSAGE (CHECK_DATA))
- ; 3761 2 THEN
- ; 3762 2
- ; 3763 2 IF .STATUS NEQ KER_ABORTED THEN RETURN STATE_A ELSE RETURN STATE_EX;
- ; 3764 2
- ; 3765 2 SELECTONE .REC_TYPE OF
- ; 3766 2 SET
- ; 3767 2
- ; 3768 2 [MSG_DATA] :
- ; 3769 3 BEGIN
- ; 3770 3
- ; 3771 3 IF .MSG_NUMBER NEQ .REC_SEQ
- ; 3772 3 THEN
- ; 3773 4 BEGIN
- ; 3774 4
- ; 3775 4 IF .OLD_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 3776 4
- ; 3777 4 OLD_RETRIES = .OLD_RETRIES + 1;
- ; 3778 4
- ; 3779 4 IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
- ; 3780 4 THEN
- ; 3781 5 BEGIN
- ; 3782 5 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 3783 5 NUM_RETRIES = 0;
- ; 3784 5 RETURN .STATE;
- ; 3785 5 END
- ; 3786 4 ELSE
- ; 3787 5 BEGIN
- ; 3788 5 KRM_ERROR (KER_PROTOERR);
- ; 3789 5 RETURN STATE_A;
- ; 3790 4 END;
- ; 3791 4
- ; 3792 3 END;
- ; 3793 3
- ; 3794 3 !
- ; 3795 3 ! Here if we have a message with a valid message number
- ; 3796 3 !
- ; 3797 3
- ; 3798 3 IF NOT BFR_EMPTY () THEN RETURN STATE_A;
- ; 3799 3
- ; 3800 3 !
- ; 3801 3 ! Check if we wish to abort for some reason
- ; 3802 3 !
- ; 3803 3
- ; 3804 3 IF .ABT_CUR_FILE
- ; 3805 3 THEN
- ; 3806 4 BEGIN
- ; 3807 4 CH$WCHAR (MSG_ACK_ABT_CUR, CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE));
- ; 3808 4 ACK_MSG_LEN = 1;
- ; 3809 4 END
- ; 3810 3 ELSE
- ; 3811 3
- ; 3812 3 IF .ABT_ALL_FILE
- ; 3813 3 THEN
- ; 3814 4 BEGIN
- ; 3815 4 CH$WCHAR (MSG_ACK_ABT_ALL, CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE));
- ; 3816 4 ACK_MSG_LEN = 1;
- ; 3817 4 END
- ; 3818 3 ELSE
- ; 3819 3 ACK_MSG_LEN = 0;
- ; 3820 3
- ; 3821 3 !
- ; 3822 3 ! Now send the ACK
- ; 3823 3 !
- ; 3824 3 SEND_PACKET (MSG_ACK, .ACK_MSG_LEN, .REC_SEQ);
- ; 3825 3 OLD_RETRIES = .NUM_RETRIES;
- ; 3826 3 NUM_RETRIES = 0;
- ; 3827 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3828 3 RETURN STATE_RD;
- ; 3829 2 END;
- ; 3830 2
- ; 3831 2 [MSG_FILE, MSG_TEXT] :
- ; 3832 3 BEGIN
- ; 3833 3
- ; 3834 3 IF .OLD_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
- ; 3835 3
- ; 3836 3 OLD_RETRIES = .OLD_RETRIES + 1;
- ; 3837 3
- ; 3838 3 IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
- ; 3839 3 THEN
- ; 3840 4 BEGIN
- ; 3841 4 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 3842 4 NUM_RETRIES = 0;
- ; 3843 4 RETURN .STATE;
- ; 3844 4 END
- ; 3845 3 ELSE
- ; 3846 4 BEGIN
- ; 3847 4 KRM_ERROR (KER_PROTOERR);
- ; 3848 4 RETURN STATE_A;
- ; 3849 3 END;
- ; 3850 3
- ; 3851 2 END;
- ; 3852 2
- ; 3853 2 [MSG_EOF] :
- ; 3854 3 BEGIN
- ; 3855 3
- ; 3856 3 IF .MSG_NUMBER NEQ .REC_SEQ
- ; 3857 3 THEN
- ; 3858 4 BEGIN
- ; 3859 4 KRM_ERROR (KER_PROTOERR);
- ; 3860 4 RETURN STATE_A;
- ; 3861 3 END;
- ; 3862 3
- ; 3863 3 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 3864 3
- ; 3865 3 IF NOT .TEXT_HEAD_FLAG
- ; 3866 3 THEN
- ; 3867 4 BEGIN
- ; 3868 4 FLAG_FILE_OPEN = FALSE;
- ; 3869 4 DISCARD_FILE_FLAG = FALSE; ! Assume we want file
- ; 3870 4
- ; 3871 4 IF .REC_LENGTH EQL 1
- ; 3872 4 THEN
- ; 3873 4
- ; 3874 4 IF CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG, CHR_SIZE)) EQL MSG_EOF_DISCARD ! [108]
- ; 3875 4 THEN
- ; 3876 4 DISCARD_FILE_FLAG = TRUE;
- ; 3877 4
- ; 3878 4 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
- ; 3879 4 THEN
- ; 3880 5 BEGIN
- ; 3881 5
- ; 3882 5 IF .DISCARD_FILE_FLAG
- ; 3883 5 THEN
- ; 3884 5
- ; 3885 5 IF .ABT_FLAG
- ; 3886 5 THEN
- ; 3887 5 TT_TEXT (UPLIT (%ASCIZ' [Interrupted]'))
- ; 3888 5 ELSE
- ; 3889 5 TT_TEXT (UPLIT (%ASCIZ' [Interrupted, partial file saved]'))
- ; 3890 5
- ; 3891 5 ELSE
- ; 3892 5 TT_TEXT (UPLIT (%ASCIZ' [OK]'));
- ; 3893 5
- ; 3894 5 TT_CRLF ();
- ; 3895 4 END;
- ; 3896 4
- ; 3897 4 IF NOT FILE_CLOSE (.DISCARD_FILE_FLAG AND .ABT_FLAG) THEN RETURN STATE_A;
- ; 3898 4
- ; 3899 4 IF .DISCARD_FILE_FLAG
- ; 3900 4 THEN
- ; 3901 4
- ; 3902 4 IF .ABT_FLAG THEN SUB_TYPE = %C'X' ELSE SUB_TYPE = %C'D'
- ; 3903 4
- ; 3904 4 ELSE
- ; 3905 4 SUB_TYPE = %C'C';
- ; 3906 4
- ; 3907 4 END
- ; 3908 3 ELSE
- ; 3909 4 BEGIN
- ; 3910 4 TT_CRLF (); ! Make sure we have a CRLF
- ; 3911 4 TT_OUTPUT (); ! And make sure all output is sent
- ; 3912 3 END;
- ; 3913 3
- ; 3914 3 XFR_STATUS (%C'F', .SUB_TYPE);
- ; 3915 3 MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
- ; 3916 3 RETURN STATE_RF;
- ; 3917 2 END;
- ; 3918 2
- ; 3919 2 [OTHERWISE] :
- ; 3920 3 BEGIN
- ; 3921 3 KRM_ERROR (KER_PROTOERR);
- ; 3922 3 RETURN STATE_A;
- ; 3923 2 END;
- ; 3924 2 TES;
- ; 3925 2
- ; 3926 1 END; ! End of REC_DATA
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAK: .ASCII \ [Interrupted]\<0><0> ; 72 72 65 74 6E 49 5B 20 00064
- ; 00 00 5D 64 65 74 70 75 0006C
- P.AAL: .ASCII \ [Interrupted, partial file saved]\<0><0>
- ; 72 72 65 74 6E 49 5B 20 00074
- ; 70 20 2C 64 65 74 70 75 0007C
- ; 66 20 6C 61 69 74 72 61 00084
- ; 65 76 61 73 20 65 6C 69 0008C
- ; 00 00 5D 64 00094
- P.AAM: .ASCII \ [OK]\<0><0><0> ; 00 00 00 5D 4B 4F 5B 20 00098
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;REC_DATA
- U.13: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 3696 01FC 00000
- MOVAB G^TT_CRLF, R8 ;TT_CRLF, R8 58 00000000G 00 9E 00002
- MOVAB G^PKT_RETRIES, R7 ;PKT_RETRIES, R7 57 00000000G 00 9E 00009
- MOVAB G^P.AAK, R6 ;P.AAK, R6 56 00000000' 00 9E 00010
- MOVAB G^ABT_FLAG, R5 ;ABT_FLAG, R5 55 00000000G 00 9E 00017
- MOVAB G^U.24, R4 ;U.24, R4 54 00000000V 00 9E 0001E
- MOVAB G^U.55, R3 ;U.55, R3 53 00000000' 00 9E 00025
- PUSHAB B^U.80 ;U.80 3760 92 AF 9F 0002C
- CALLS #1, G^U.25 ;#1, U.25 00000000V 00 01 FB 0002F
- BLBS R0, 3$ ;STATUS, 3$ 10 50 E8 00036
- CMPL R0, #134316258 ;STATUS, #134316258 3763 080180E2 8F 50 D1 00039
- BEQL 2$ ;2$ 03 13 00040
- 1$: BRW 28$ ;28$ 0182 31 00042
- 2$: MOVL #19, R0 ;#19, R0 50 13 D0 00045
- RET ; 04 00048
- 3$: MOVL 12(R3), R2 ;REC_TYPE, R2 3765 52 0C A3 D0 00049
- CMPL R2, #68 ;R2, #68 3768 00000044 8F 52 D1 0004D
- BNEQ 9$ ;9$ 6C 12 00054
- MOVQ (R3), R0 ;MSG_NUMBER, R0 3771 50 63 7D 00056
- CMPL R0, R1 ;R0, R1 51 50 D1 00059
- BEQL 4$ ;4$ 16 13 0005C
- CMPL -8(R3), (R7) ;OLD_RETRIES, PKT_RETRIES 3775 67 F8 A3 D1 0005E
- BGTR 11$ ;11$ 76 14 00062
- INCL -8(R3) ;OLD_RETRIES 3777 F8 A3 D6 00064
- DECL R0 ;R0 3779 50 D7 00067
- CMPZV #0, #6, R0, R1 ;#0, #6, R0, R1 06 00 ED 00069
- ; 51 50 0006C
- BNEQ 13$ ;13$ 7E 12 0006E
- PUSHL R1 ;R1 3782 51 DD 00070
- BRB 14$ ;14$ 7E 11 00072
- 4$: CALLS #0, G^U.28 ;#0, U.28 3798 00000000V 00 00 FB 00074
- BLBC R0, 1$ ;R0, 1$ C4 50 E9 0007B
- BLBC G^ABT_CUR_FILE, 5$ ;ABT_CUR_FILE, 5$ 3804 08 00000000G 00 E9 0007E
- MOVB #88, 1024(R3) ;#88, SND_MSG+4 3807 0400 C3 58 8F 90 00085
- BRB 6$ ;6$ 3808 0D 11 0008B
- 5$: BLBC G^ABT_ALL_FILE, 7$ ;ABT_ALL_FILE, 7$ 3812 0B 00000000G 00 E9 0008D
- MOVB #90, 1024(R3) ;#90, SND_MSG+4 3815 0400 C3 5A 8F 90 00094
- 6$: MOVL #1, R0 ;#1, ACK_MSG_LEN 3816 50 01 D0 0009A
- BRB 8$ ;8$ 02 11 0009D
- 7$: CLRL R0 ;ACK_MSG_LEN 3819 50 D4 0009F
- 8$: PUSHL 4(R3) ;REC_SEQ 3824 04 A3 DD 000A1
- PUSHL R0 ;ACK_MSG_LEN 50 DD 000A4
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 000A6
- CALLS #3, (R4) ;#3, SEND_PACKET 64 03 FB 000AA
- MOVL -4(R3), -8(R3) ;NUM_RETRIES, OLD_RETRIES 3825 F8 A3 FC A3 D0 000AD
- CLRL -4(R3) ;NUM_RETRIES 3826 FC A3 D4 000B2
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 3827 63 01 C1 000B5
- ; 50 000B8
- EXTZV #0, #6, R0, (R3) ;#0, #6, R0, MSG_NUMBER 06 00 EF 000B9
- ; 63 50 000BC
- MOVL #8, R0 ;#8, R0 3828 50 08 D0 000BE
- RET ; 04 000C1
- 9$: CMPL R2, #70 ;R2, #70 3831 00000046 8F 52 D1 000C2
- BEQL 10$ ;10$ 09 13 000C9
- CMPL R2, #88 ;R2, #88 00000058 8F 52 D1 000CB
- BNEQ 15$ ;15$ 2F 12 000D2
- 10$: CMPL -8(R3), (R7) ;OLD_RETRIES, PKT_RETRIES 3834 67 F8 A3 D1 000D4
- BLEQ 12$ ;12$ 04 15 000D8
- 11$: MOVL #20, R0 ;#20, R0 50 14 D0 000DA
- RET ; 04 000DD
- 12$: INCL -8(R3) ;OLD_RETRIES 3836 F8 A3 D6 000DE
- SUBL3 #1, (R3), R1 ;#1, MSG_NUMBER, R1 3838 63 01 C3 000E1
- ; 51 000E4
- MOVL 4(R3), R0 ;REC_SEQ, R0 50 04 A3 D0 000E5
- CMPZV #0, #6, R1, R0 ;#0, #6, R1, R0 06 00 ED 000E9
- ; 50 51 000EC
- 13$: BNEQ 16$ ;16$ 20 12 000EE
- PUSHL R0 ;R0 3841 50 DD 000F0
- 14$: CLRL -(SP) ;-(SP) 7E D4 000F2
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 000F4
- CALLS #3, (R4) ;#3, SEND_PACKET 64 03 FB 000F8
- CLRL -4(R3) ;NUM_RETRIES 3842 FC A3 D4 000FB
- MOVL -16(R3), R0 ;STATE, R0 3843 50 F0 A3 D0 000FE
- RET ; 04 00102
- 15$: CMPL R2, #90 ;R2, #90 3853 0000005A 8F 52 D1 00103
- BNEQ 16$ ;16$ 04 12 0010A
- CMPL (R3), 4(R3) ;MSG_NUMBER, REC_SEQ 3856 04 A3 63 D1 0010C
- 16$: BEQL 17$ ;17$ 03 13 00110
- BRW 27$ ;27$ 00A5 31 00112
- 17$: PUSHL 4(R3) ;REC_SEQ 3863 04 A3 DD 00115
- CLRL -(SP) ;-(SP) 7E D4 00118
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 0011A
- CALLS #3, (R4) ;#3, SEND_PACKET 64 03 FB 0011E
- BLBS 2028(R3), 25$ ;TEXT_HEAD_FLAG, 25$ 3865 70 07EC C3 E8 00121
- CLRL G^FLAG_FILE_OPEN ;FLAG_FILE_OPEN 3868 00000000' 00 D4 00126
- CLRL R2 ;DISCARD_FILE_FLAG 3869 52 D4 0012C
- CMPL 8(R3), #1 ;REC_LENGTH, #1 3871 01 08 A3 D1 0012E
- BNEQ 18$ ;18$ 0F 12 00132
- MOVL -64(R3), R0 ;RECV_PKT_MSG, R0 3874 50 C0 A3 D0 00134
- CMPB 16(R3)[R0], #68 ;REC_MSG[R0], #68 44 8F 10 A340 91 00138
- BNEQ 18$ ;18$ 03 12 0013E
- MOVL #1, R2 ;#1, DISCARD_FILE_FLAG 3876 52 01 D0 00140
- 18$: BLBS G^CONNECT_FLAG, 22$ ;CONNECT_FLAG, 22$ 3878 23 00000000G 00 E8 00143
- BLBC G^TY_FIL, 22$ ;TY_FIL, 22$ 1C 00000000G 00 E9 0014A
- BLBC R2, 20$ ;DISCARD_FILE_FLAG, 20$ 3882 0C 52 E9 00151
- BLBC (R5), 19$ ;ABT_FLAG, 19$ 3885 04 65 E9 00154
- PUSHL R6 ;R6 3887 56 DD 00157
- BRB 21$ ;21$ 08 11 00159
- 19$: PUSHAB 16(R6) ;P.AAL 3889 10 A6 9F 0015B
- BRB 21$ ;21$ 03 11 0015E
- 20$: PUSHAB 52(R6) ;P.AAM 3892 34 A6 9F 00160
- 21$: CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 00163
- CALLS #0, (R8) ;#0, TT_CRLF 3894 68 00 FB 0016A
- 22$: MCOML (R5), R0 ;ABT_FLAG, R0 3897 50 65 D2 0016D
- BICL3 R0, R2, -(SP) ;R0, DISCARD_FILE_FLAG, -(SP) 52 50 CB 00170
- ; 7E 00173
- CALLS #1, G^FILE_CLOSE ;#1, FILE_CLOSE 00000000G 00 01 FB 00174
- BLBC R0, 28$ ;R0, 28$ 49 50 E9 0017B
- BLBC R2, 24$ ;DISCARD_FILE_FLAG, 24$ 3899 0F 52 E9 0017E
- BLBC (R5), 23$ ;ABT_FLAG, 23$ 3902 06 65 E9 00181
- MOVZBL #88, R0 ;#88, SUB_TYPE 50 58 8F 9A 00184
- BRB 26$ ;26$ 16 11 00188
- 23$: MOVZBL #68, R0 ;#68, SUB_TYPE 50 44 8F 9A 0018A
- BRB 26$ ;26$ 10 11 0018E
- 24$: MOVZBL #67, R0 ;#67, SUB_TYPE 3905 50 43 8F 9A 00190
- BRB 26$ ;26$ 0A 11 00194
- 25$: CALLS #0, (R8) ;#0, TT_CRLF 3910 68 00 FB 00196
- CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 3911 00000000G 00 00 FB 00199
- 26$: PUSHL R0 ;SUB_TYPE 3914 50 DD 001A0
- MOVZBL #70, -(SP) ;#70, -(SP) 7E 46 8F 9A 001A2
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 001A6
- ADDL3 #1, (R3), R0 ;#1, MSG_NUMBER, R0 3915 63 01 C1 001AD
- ; 50 001B0
- EXTZV #0, #6, R0, (R3) ;#0, #6, R0, MSG_NUMBER 06 00 EF 001B1
- ; 63 50 001B4
- MOVL #7, R0 ;#7, R0 3916 50 07 D0 001B6
- RET ; 04 001B9
- 27$: PUSHL #134316226 ;#134316226 3921 080180C2 8F DD 001BA
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 001C0
- 28$: MOVL #10, R0 ;#10, R0 3922 50 0A D0 001C7
- RET ; 04 001CA
-
- ; Routine Size: 459 bytes, Routine Base: $CODE$ + 1287
-
-
- ; 3927 1 %SBTTL 'SERVER - Generic commands'
- ; 3928 1 ROUTINE SERVER_GENERIC =
- ; 3929 1
- ; 3930 1 !++
- ; 3931 1 ! FUNCTIONAL DESCRIPTION:
- ; 3932 1 !
- ; 3933 1 ! This routine will handle the generic server messages.
- ; 3934 1 ! The generic server messages include FINISH, LOGOUT.
- ; 3935 1 !
- ; 3936 1 ! CALLING SEQUENCE:
- ; 3937 1 !
- ; 3938 1 ! STATE = SERVER_GENERIC();
- ; 3939 1 !
- ; 3940 1 ! INPUT PARAMETERS:
- ; 3941 1 !
- ; 3942 1 ! None.
- ; 3943 1 !
- ; 3944 1 ! IMPLICIT INPUTS:
- ; 3945 1 !
- ; 3946 1 ! Generic message receive in REC_MSG.
- ; 3947 1 !
- ; 3948 1 ! OUTPUT PARAMETERS:
- ; 3949 1 !
- ; 3950 1 ! Returns new state for FSM
- ; 3951 1 !
- ; 3952 1 ! IMPLICIT OUTPUTS:
- ; 3953 1 !
- ; 3954 1 ! None.
- ; 3955 1 !
- ; 3956 1 ! COMPLETION CODES:
- ; 3957 1 !
- ; 3958 1 ! None.
- ; 3959 1 !
- ; 3960 1 ! SIDE EFFECTS:
- ; 3961 1 !
- ; 3962 1 ! None.
- ; 3963 1 !
- ; 3964 1 !--
- ; 3965 1
- ; 3966 2 BEGIN
- ; 3967 2
- ; 3968 2 LOCAL
- ; 3969 2 STATUS, ! Returned status
- ; 3970 2 G_FUNC, ! Generic command function
- ; 3971 2 POINTER, ! Character pointer
- ; 3972 2 DATA_TEXT : VECTOR [CH$ALLOCATION (MAX_MSG)], ! Unpacked message
- ; 3973 2 DATA_SIZE; ! Actual size of data
- ; 3974 2
- ; 3975 2 ROUTINE UNPACK_DATA (POINTER, SIZE, DST_ADDR, DST_LEN) =
- ; 3976 2 !
- ; 3977 2 ! Routine to unpack an argument.
- ; 3978 2 ! This will copy the argument data to the desired buffer.
- ; 3979 2 !
- ; 3980 3 BEGIN
- ; 3981 3
- ; 3982 3 IF .SIZE GTR 0 ! If we have something to unpack
- ; 3983 3 THEN
- ; 3984 4 BEGIN
- ; 3985 4 .DST_LEN = UNCHAR (CH$RCHAR_A (.POINTER));
- ; 3986 4
- ; 3987 4 IF ..DST_LEN LSS 0
- ; 3988 4 THEN
- ; 3989 5 BEGIN
- ; 3990 5 KRM_ERROR (KER_PROTOERR); ! Someone screwed up
- ; 3991 5 ..DST_LEN = 0;
- ; 3992 5 RETURN -1;
- ; 3993 4 END;
- ; 3994 4
- ; 3995 4 IF ..DST_LEN GTR .SIZE - 1 THEN .DST_LEN = .SIZE - 1;
- ; 3996 4
- ; 3997 4 CH$COPY (..DST_LEN, ..POINTER, CHR_NUL, MAX_MSG, CH$PTR (.DST_ADDR));
- ; 3998 4 .POINTER = CH$PLUS (..POINTER, ..DST_LEN);
- ; 3999 4 RETURN .SIZE - ..DST_LEN - 1;
- ; 4000 4 END
- ; 4001 3 ELSE
- ; 4002 3 !
- ; 4003 3 ! If nothing left in buffer, return the current size (0)
- ; 4004 3 !
- ; 4005 3 RETURN .SIZE;
- ; 4006 3
- ; 4007 2 END;
-
-
-
-
-
- ;UNPACK_DATA
- U.81: .WORD ^M<R2,R3,R4,R5,R6> ;Save R2,R3,R4,R5,R6 3975 007C 00000
- MOVL 8(AP), R6 ;SIZE, R6 3982 56 08 AC D0 00002
- BLEQ 3$ ;3$ 50 15 00006
- MOVL @4(AP), R1 ;@POINTER, R1 3985 51 04 BC D0 00008
- MOVZBL (R1), R0 ;(R1), R0 50 61 9A 0000C
- INCL @4(AP) ;@POINTER 04 BC D6 0000F
- MOVAB -32(R0), @16(AP) ;-32(R0), @DST_LEN 10 BC E0 A0 9E 00012
- MOVL @16(AP), R2 ;@DST_LEN, R2 3987 52 10 BC D0 00017
- BGEQ 1$ ;1$ 13 18 0001B
- PUSHL #134316226 ;#134316226 3990 080180C2 8F DD 0001D
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 00023
- CLRL (R2) ;(R2) 3991 62 D4 0002A
- MNEGL #1, R0 ;#1, R0 3992 50 01 CE 0002C
- RET ; 04 0002F
- 1$: MOVAB -1(R6), R0 ;-1(R6), R0 3995 50 FF A6 9E 00030
- CMPL R2, R0 ;R2, R0 50 52 D1 00034
- BLEQ 2$ ;2$ 04 15 00037
- MOVL R0, @16(AP) ;R0, @DST_LEN 10 BC 50 D0 00039
- 2$: MOVL @4(AP), R0 ;@POINTER, R0 3997 50 04 BC D0 0003D
- MOVC5 @16(AP), (R0), #0, #1002, - ;@DST_LEN, (R0), #0, #1002, - 60 10 BC 2C 00041
- @12(AP) ;@DST_ADDR 03EA 8F 00 00045
- ; 0C BC 00049
- ADDL2 @16(AP), @4(AP) ;@DST_LEN, @POINTER 3998 04 BC 10 BC C0 0004B
- SUBL3 @16(AP), R6, R0 ;@DST_LEN, R6, R0 3999 56 10 BC C3 00050
- ; 50 00054
- DECL R0 ;R0 50 D7 00055
- RET ; 04 00057
- 3$: MOVL R6, R0 ;R6, R0 50 56 D0 00058
- RET ; 4005 04 0005B
-
- ; Routine Size: 92 bytes, Routine Base: $CODE$ + 1452
-
-
- ; 4008 2 !
- ; 4009 2 ! First unpack the message data into its various pieces
- ; 4010 2 !
- ; 4011 2 SET_STRING (CH$PTR (DATA_TEXT), MAX_MSG, TRUE); ! Initialize for unpacking
- ; 4012 2 BFR_EMPTY (); ! Unpack the data
- ; 4013 2 DATA_SIZE = SET_STRING (0, 0, FALSE); ! All done, get size
- ; 4014 2
- ; 4015 2 IF .DATA_SIZE LEQ 0
- ; 4016 2 THEN
- ; 4017 3 BEGIN
- ; 4018 3 KRM_ERROR (KER_PROTOERR); ! Someone screwed up
- ; 4019 3 RETURN STATE_A; ! Since no subtype
- ; 4020 2 END;
- ; 4021 2
- ; 4022 2 !
- ; 4023 2 ! Get the arguments from the unpacked data (if any)
- ; 4024 2 !
- ; 4025 2 GEN_1SIZE = 0; ! Assume no args
- ; 4026 2 GEN_2SIZE = 0; ! none at all
- ; 4027 2 GEN_3SIZE = 0;
- ; 4028 2 CH$WCHAR (CHR_NUL, CH$PTR (GEN_1DATA)); ! Ensure all are null terminated
- ; 4029 2 CH$WCHAR (CHR_NUL, CH$PTR (GEN_2DATA));
- ; 4030 2 CH$WCHAR (CHR_NUL, CH$PTR (GEN_3DATA));
- ; 4031 2 POINTER = CH$PTR (DATA_TEXT, 1); ! Point at second character
- ; 4032 2 DATA_SIZE = .DATA_SIZE - 1; ! Account for subtype
- ; 4033 2
- ; 4034 2 IF .DATA_SIZE GTR 0 ! Room for first arg?
- ; 4035 2 THEN
- ; 4036 3 BEGIN
- ; 4037 3 DATA_SIZE = UNPACK_DATA (POINTER, .DATA_SIZE, GEN_1DATA, GEN_1SIZE);
- ; 4038 3
- ; 4039 3 IF .DATA_SIZE LSS 0 THEN RETURN STATE_A; ! Punt if bad arguments
- ; 4040 3
- ; 4041 3 IF .DATA_SIZE GTR 0 ! Second argument present?
- ; 4042 3 THEN
- ; 4043 4 BEGIN
- ; 4044 4 DATA_SIZE = UNPACK_DATA (POINTER, .DATA_SIZE, GEN_2DATA, GEN_2SIZE);
- ; 4045 4
- ; 4046 4 IF .DATA_SIZE LSS 0 THEN RETURN STATE_A; ! Punt if bad arguments
- ; 4047 4
- ; 4048 4 IF .DATA_SIZE GTR 0 ! Third argument here?
- ; 4049 4 THEN
- ; 4050 5 BEGIN
- ; 4051 5 DATA_SIZE = UNPACK_DATA (POINTER, .DATA_SIZE, GEN_3DATA, GEN_3SIZE);
- ; 4052 5
- ; 4053 5 IF .DATA_SIZE LSS 0 THEN RETURN STATE_A; ! Punt if bad arguments
- ; 4054 5
- ; 4055 4 END;
- ; 4056 4
- ; 4057 3 END;
- ; 4058 3
- ; 4059 2 END;
- ; 4060 2
- ; 4061 2 SELECTONE CH$RCHAR (CH$PTR (DATA_TEXT)) OF
- ; 4062 2 SET
- ; 4063 2 !
- ; 4064 2 ! EXIT command, just return the status to the upper level
- ; 4065 2 !
- ; 4066 2
- ; 4067 2 [MSG_GEN_EXIT] :
- ; 4068 3 BEGIN
- ; 4069 3 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 4070 3 RETURN STATE_FI;
- ; 4071 2 END;
- ; 4072 2 !
- ; 4073 2 ! LOGOUT command, ACK the message then call the system routine to
- ; 4074 2 ! kill the process (log the job out, etc.)
- ; 4075 2 !
- ; 4076 2
- ; 4077 2 [MSG_GEN_LOGOUT] :
- ; 4078 3 BEGIN
- ; 4079 3 SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
- ; 4080 3 SY_LOGOUT ();
- ; 4081 3 RETURN STATE_LG;
- ; 4082 2 END;
- ; 4083 2 !
- ; 4084 2 ! For a type command, just set up a transfer flagging we want a text header
- ; 4085 2 ! instead of a file header.
- ; 4086 2 !
- ; 4087 2
- ; 4088 2 [MSG_GEN_TYPE] :
- ; 4089 3 BEGIN
- ; 4090 3 CH$COPY (.GEN_1SIZE, CH$PTR (GEN_1DATA), CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
- ; 4091 3 FILE_SIZE = .GEN_1SIZE;
- ; 4092 3 TEXT_HEAD_FLAG = TRUE; ! Now want text header
- ; 4093 3 XFR_STATUS (%C'I', %C'G'); ! Tell display routine we are doing a command
- ; 4094 3
- ; 4095 3 IF .STATE EQL STATE_II AND .BLK_CHK_TYPE EQL .INI_CHK_TYPE
- ; 4096 3 THEN
- ; 4097 3 RETURN STATE_OF ! Must open the file
- ; 4098 3 ELSE
- ; 4099 3 RETURN STATE_S; ! Start the transaction with a send
- ; 4100 3
- ; 4101 2 END;
- ; 4102 2
- ; 4103 2 [MSG_GEN_DIRECTORY] :
- ; 4104 2 G_FUNC = GC_DIRECTORY;
- ; 4105 2
- ; 4106 2 [MSG_GEN_DISK_USAGE] :
- ; 4107 2 G_FUNC = GC_DISK_USAGE;
- ; 4108 2
- ; 4109 2 [MSG_GEN_DELETE] :
- ; 4110 2 G_FUNC = GC_DELETE;
- ; 4111 2
- ; 4112 2 [MSG_GEN_HELP] :
- ; 4113 2 G_FUNC = GC_HELP;
- ; 4114 2
- ; 4115 2 [MSG_GEN_LOGIN] :
- ; 4116 2 G_FUNC = GC_LGN;
- ; 4117 2
- ; 4118 2 [MSG_GEN_CONNECT] :
- ; 4119 2 G_FUNC = GC_CONNECT;
- ; 4120 2
- ; 4121 2 [MSG_GEN_RENAME] :
- ; 4122 2 G_FUNC = GC_RENAME;
- ; 4123 2
- ; 4124 2 [MSG_GEN_COPY] :
- ; 4125 2 G_FUNC = GC_COPY;
- ; 4126 2
- ; 4127 2 [MSG_GEN_WHO] :
- ; 4128 2 G_FUNC = GC_WHO;
- ; 4129 2
- ; 4130 2 [MSG_GEN_SEND] :
- ; 4131 2 G_FUNC = GC_SEND_MSG;
- ; 4132 2
- ; 4133 2 [MSG_GEN_QUERY] :
- ; 4134 2 G_FUNC = GC_STATUS;
- ; 4135 2
- ; 4136 2 [MSG_GEN_PROGRAM] :
- ; 4137 2 G_FUNC = GC_PROGRAM;
- ; 4138 2
- ; 4139 2 [MSG_GEN_JOURNAL] :
- ; 4140 2 G_FUNC = GC_JOURNAL;
- ; 4141 2
- ; 4142 2 [MSG_GEN_VARIABLE] :
- ; 4143 2 G_FUNC = GC_VARIABLE;
- ; 4144 2 !
- ; 4145 2 ! Here if we have a function that is not implemented in KERMSG.
- ; 4146 2 !
- ; 4147 2
- ; 4148 2 [OTHERWISE] :
- ; 4149 3 BEGIN
- ; 4150 3 KRM_ERROR (KER_UNIMPLGEN);
- ; 4151 3 RETURN STATE_A;
- ; 4152 2 END;
- ; 4153 2 TES;
- ; 4154 2
- ; 4155 2 !
- ; 4156 2 ! If we get here, we have gotten a known type of generic message that
- ; 4157 2 ! we need to have our operating system dependent routine handle.
- ; 4158 2 !
- ; 4159 2 RETURN CALL_SY_RTN (.G_FUNC);
- ; 4160 1 END; ! End of SERVER_GENERIC
-
-
-
-
-
- ;SERVER_GENERIC
- U.14: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,- 3928 0FFC 00000
- R11> ;R11
- MOVAB B^U.81, R11 ;U.81, R11 5B 9F AF 9E 00002
- MOVAB G^GEN_1DATA, R10 ;GEN_1DATA, R10 5A 00000000G 00 9E 00006
- MOVAB G^GEN_1SIZE, R9 ;GEN_1SIZE, R9 59 00000000G 00 9E 0000D
- MOVAB G^U.56, R8 ;U.56, R8 58 00000000' 00 9E 00014
- MOVAB -1008(SP), SP ;-1008(SP), SP 5E FC10 CE 9E 0001B
- PUSHL #1 ;#1 4011 01 DD 00020
- MOVZWL #1002, -(SP) ;#1002, -(SP) 7E 03EA 8F 3C 00022
- PUSHAB 12(SP) ;DATA_TEXT 0C AE 9F 00027
- CALLS #3, G^U.30 ;#3, U.30 00000000V 00 03 FB 0002A
- CALLS #0, G^U.28 ;#0, U.28 4012 00000000V 00 00 FB 00031
- CLRQ -(SP) ;-(SP) 4013 7E 7C 00038
- CLRL -(SP) ;-(SP) 7E D4 0003A
- CALLS #3, G^U.30 ;#3, U.30 00000000V 00 03 FB 0003C
- MOVL R0, R2 ;R0, DATA_SIZE 52 50 D0 00043
- BGTR 1$ ;1$ 4015 09 14 00046
- PUSHL #134316226 ;#134316226 4018 080180C2 8F DD 00048
- BRW 25$ ;25$ 0191 31 0004E
- 1$: CLRL (R9) ;GEN_1SIZE 4025 69 D4 00051
- CLRL G^GEN_2SIZE ;GEN_2SIZE 4026 00000000G 00 D4 00053
- CLRL G^GEN_3SIZE ;GEN_3SIZE 4027 00000000G 00 D4 00059
- CLRB (R10) ;GEN_1DATA 4028 6A 94 0005F
- CLRB G^GEN_2DATA ;GEN_2DATA 4029 00000000G 00 94 00061
- CLRB G^GEN_3DATA ;GEN_3DATA 4030 00000000G 00 94 00067
- MOVAB 5(SP), (SP) ;DATA_TEXT+1, POINTER 4031 6E 05 AE 9E 0006D
- DECL R2 ;DATA_SIZE 4032 52 D7 00071
- BLEQ 3$ ;3$ 4034 4A 15 00073
- PUSHL R9 ;R9 4037 59 DD 00075
- PUSHR #^M<R2,R10> ;#^M<R2,R10> 0404 8F BB 00077
- PUSHAB 12(SP) ;POINTER 0C AE 9F 0007B
- CALLS #4, (R11) ;#4, UNPACK_DATA 6B 04 FB 0007E
- MOVL R0, R2 ;R0, DATA_SIZE 52 50 D0 00081
- BLSS 2$ ;2$ 4039 34 19 00084
- BLEQ 3$ ;3$ 4041 37 15 00086
- PUSHAB G^GEN_2SIZE ;GEN_2SIZE 4044 00000000G 00 9F 00088
- PUSHAB G^GEN_2DATA ;GEN_2DATA 00000000G 00 9F 0008E
- PUSHL R2 ;DATA_SIZE 52 DD 00094
- PUSHAB 12(SP) ;POINTER 0C AE 9F 00096
- CALLS #4, (R11) ;#4, UNPACK_DATA 6B 04 FB 00099
- MOVL R0, R2 ;R0, DATA_SIZE 52 50 D0 0009C
- BLSS 2$ ;2$ 4046 19 19 0009F
- BLEQ 3$ ;3$ 4048 1C 15 000A1
- PUSHAB G^GEN_3SIZE ;GEN_3SIZE 4051 00000000G 00 9F 000A3
- PUSHAB G^GEN_3DATA ;GEN_3DATA 00000000G 00 9F 000A9
- PUSHL R2 ;DATA_SIZE 52 DD 000AF
- PUSHAB 12(SP) ;POINTER 0C AE 9F 000B1
- CALLS #4, (R11) ;#4, UNPACK_DATA 6B 04 FB 000B4
- MOVL R0, R2 ;R0, DATA_SIZE 52 50 D0 000B7
- 2$: BGEQ 3$ ;3$ 4053 03 18 000BA
- BRW 26$ ;26$ 012A 31 000BC
- 3$: MOVZBL 4(SP), R6 ;DATA_TEXT, R6 4061 56 04 AE 9A 000BF
- CMPB R6, #70 ;R6, #70 4067 46 8F 56 91 000C3
- BNEQ 4$ ;4$ 13 12 000C7
- PUSHL (R8) ;REC_SEQ 4069 68 DD 000C9
- CLRL -(SP) ;-(SP) 7E D4 000CB
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 000CD
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 000D1
- MOVL #16, R0 ;#16, R0 4070 50 10 D0 000D8
- RET ; 04 000DB
- 4$: CMPB R6, #76 ;R6, #76 4077 4C 8F 56 91 000DC
- BNEQ 5$ ;5$ 1A 12 000E0
- PUSHL (R8) ;REC_SEQ 4079 68 DD 000E2
- CLRL -(SP) ;-(SP) 7E D4 000E4
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 000E6
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 000EA
- CALLS #0, G^SY_LOGOUT ;#0, SY_LOGOUT 4080 00000000G 00 00 FB 000F1
- MOVL #17, R0 ;#17, R0 4081 50 11 D0 000F8
- RET ; 04 000FB
- 5$: CMPB R6, #84 ;R6, #84 4088 54 8F 56 91 000FC
- BNEQ 7$ ;7$ 3F 12 00100
- MOVL (R9), R7 ;GEN_1SIZE, R7 4090 57 69 D0 00102
- MOVC5 R7, (R10), #0, #132, G^FILE_NAME ;R7, GEN_1DATA, #0, #132, FILE_NAME 6A 57 2C 00105
- ; 0084 8F 00 00108
- ; 00000000G 00 0010C
- MOVL R7, G^FILE_SIZE ;R7, FILE_SIZE 4091 00000000G 00 57 D0 00111
- MOVL #1, 2024(R8) ;#1, TEXT_HEAD_FLAG 4092 07E8 C8 01 D0 00118
- MOVZBL #71, -(SP) ;#71, -(SP) 4093 7E 47 8F 9A 0011D
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 00121
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 00125
- CMPL -20(R8), #15 ;STATE, #15 4095 0F EC A8 D1 0012C
- BNEQ 6$ ;6$ 0B 12 00130
- CMPL -32(R8), -36(R8) ;BLK_CHK_TYPE, INI_CHK_TYPE DC A8 E0 A8 D1 00132
- BNEQ 6$ ;6$ 04 12 00137
- MOVL #18, R0 ;#18, R0 4097 50 12 D0 00139
- RET ; 04 0013C
- 6$: MOVL #1, R0 ;#1, R0 4099 50 01 D0 0013D
- RET ; 04 00140
- 7$: CMPB R6, #68 ;R6, #68 4103 44 8F 56 91 00141
- BNEQ 8$ ;8$ 06 12 00145
- MOVL #2, R2 ;#2, G_FUNC 4104 52 02 D0 00147
- BRW 21$ ;21$ 0082 31 0014A
- 8$: CMPB R6, #85 ;R6, #85 4106 55 8F 56 91 0014D
- BNEQ 9$ ;9$ 05 12 00151
- MOVL #3, R2 ;#3, G_FUNC 4107 52 03 D0 00153
- BRB 10$ ;10$ 09 11 00156
- 9$: CMPB R6, #69 ;R6, #69 4109 45 8F 56 91 00158
- BNEQ 11$ ;11$ 05 12 0015C
- MOVL #4, R2 ;#4, G_FUNC 4110 52 04 D0 0015E
- 10$: BRB 23$ ;23$ 77 11 00161
- 11$: CMPB R6, #72 ;R6, #72 4112 48 8F 56 91 00163
- BNEQ 12$ ;12$ 05 12 00167
- MOVL #6, R2 ;#6, G_FUNC 4113 52 06 D0 00169
- BRB 27$ ;27$ 7F 11 0016C
- 12$: CMPB R6, #73 ;R6, #73 4115 49 8F 56 91 0016E
- BNEQ 13$ ;13$ 05 12 00172
- MOVL #8, R2 ;#8, G_FUNC 4116 52 08 D0 00174
- BRB 27$ ;27$ 74 11 00177
- 13$: CMPB R6, #67 ;R6, #67 4118 43 8F 56 91 00179
- BNEQ 14$ ;14$ 05 12 0017D
- MOVL #9, R2 ;#9, G_FUNC 4119 52 09 D0 0017F
- BRB 27$ ;27$ 69 11 00182
- 14$: CMPB R6, #82 ;R6, #82 4121 52 8F 56 91 00184
- BNEQ 15$ ;15$ 05 12 00188
- MOVL #10, R2 ;#10, G_FUNC 4122 52 0A D0 0018A
- BRB 27$ ;27$ 5E 11 0018D
- 15$: CMPB R6, #75 ;R6, #75 4124 4B 8F 56 91 0018F
- BNEQ 16$ ;16$ 05 12 00193
- MOVL #11, R2 ;#11, G_FUNC 4125 52 0B D0 00195
- BRB 27$ ;27$ 53 11 00198
- 16$: CMPB R6, #87 ;R6, #87 4127 57 8F 56 91 0019A
- BNEQ 17$ ;17$ 05 12 0019E
- MOVL #12, R2 ;#12, G_FUNC 4128 52 0C D0 001A0
- BRB 27$ ;27$ 48 11 001A3
- 17$: CMPB R6, #77 ;R6, #77 4130 4D 8F 56 91 001A5
- BNEQ 18$ ;18$ 05 12 001A9
- MOVL #13, R2 ;#13, G_FUNC 4131 52 0D D0 001AB
- BRB 27$ ;27$ 3D 11 001AE
- 18$: CMPB R6, #81 ;R6, #81 4133 51 8F 56 91 001B0
- BNEQ 19$ ;19$ 05 12 001B4
- MOVL #14, R2 ;#14, G_FUNC 4134 52 0E D0 001B6
- BRB 27$ ;27$ 32 11 001B9
- 19$: CMPB R6, #80 ;R6, #80 4136 50 8F 56 91 001BB
- BNEQ 20$ ;20$ 05 12 001BF
- MOVL #19, R2 ;#19, G_FUNC 4137 52 13 D0 001C1
- BRB 27$ ;27$ 27 11 001C4
- 20$: CMPB R6, #74 ;R6, #74 4139 4A 8F 56 91 001C6
- BNEQ 22$ ;22$ 05 12 001CA
- MOVL #17, R2 ;#17, G_FUNC 4140 52 11 D0 001CC
- 21$: BRB 27$ ;27$ 1C 11 001CF
- 22$: CMPB R6, #86 ;R6, #86 4142 56 8F 56 91 001D1
- BNEQ 24$ ;24$ 05 12 001D5
- MOVL #18, R2 ;#18, G_FUNC 4143 52 12 D0 001D7
- 23$: BRB 27$ ;27$ 11 11 001DA
- 24$: PUSHL #134316210 ;#134316210 4150 080180B2 8F DD 001DC
- 25$: CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 001E2
- 26$: MOVL #10, R0 ;#10, R0 4151 50 0A D0 001E9
- RET ; 04 001EC
- 27$: PUSHL R2 ;G_FUNC 4159 52 DD 001ED
- CALLS #1, G^U.17 ;#1, U.17 00000000V 00 01 FB 001EF
- RET ; 04 001F6
-
- ; Routine Size: 503 bytes, Routine Base: $CODE$ + 14AE
-
-
- ; 4161 1 %SBTTL 'HOST_COMMAND - perform a host command'
- ; 4162 1 ROUTINE HOST_COMMAND =
- ; 4163 1
- ; 4164 1 !++
- ; 4165 1 ! FUNCTIONAL DESCRIPTION:
- ; 4166 1 !
- ; 4167 1 ! This routine will handle the host command packet.
- ; 4168 1 ! It will set up the data for the call to the system routine.
- ; 4169 1 !
- ; 4170 1 ! CALLING SEQUENCE:
- ; 4171 1 !
- ; 4172 1 ! STATE = HOST_COMMAND();
- ; 4173 1 !
- ; 4174 1 ! INPUT PARAMETERS:
- ; 4175 1 !
- ; 4176 1 ! None.
- ; 4177 1 !
- ; 4178 1 ! IMPLICIT INPUTS:
- ; 4179 1 !
- ; 4180 1 ! Generic message receive in REC_MSG.
- ; 4181 1 !
- ; 4182 1 ! OUTPUT PARAMETERS:
- ; 4183 1 !
- ; 4184 1 ! Returns new state for FSM
- ; 4185 1 !
- ; 4186 1 ! IMPLICIT OUTPUTS:
- ; 4187 1 !
- ; 4188 1 ! None.
- ; 4189 1 !
- ; 4190 1 ! COMPLETION CODES:
- ; 4191 1 !
- ; 4192 1 ! None.
- ; 4193 1 !
- ; 4194 1 ! SIDE EFFECTS:
- ; 4195 1 !
- ; 4196 1 ! None.
- ; 4197 1 !
- ; 4198 1 !--
- ; 4199 1
- ; 4200 2 BEGIN
- ; 4201 2 GEN_1SIZE = 0;
- ; 4202 2 GEN_2SIZE = 0;
- ; 4203 2 GEN_3SIZE = 0;
- ; 4204 2
- ; 4205 2 IF .REC_LENGTH LEQ 0
- ; 4206 2 THEN
- ; 4207 3 BEGIN
- ; 4208 3 KRM_ERROR (KER_PROTOERR); ! Return an error
- ; 4209 3 RETURN STATE_A; ! Just abort
- ; 4210 2 END;
- ; 4211 2
- ; 4212 2 SET_STRING (CH$PTR (GEN_1DATA), MAX_MSG, TRUE); ! Start writing to buffer
- ; 4213 2 BFR_EMPTY (); ! Dump the text
- ; 4214 2 GEN_1SIZE = SET_STRING (0, 0, FALSE); ! Get the result
- ; 4215 2 RETURN CALL_SY_RTN (GC_COMMAND);
- ; 4216 1 END; ! End of HOST_COMMAND
-
-
-
-
-
- ;HOST_COMMAND
- U.15: .WORD ^M<R2,R3> ;Save R2,R3 4162 000C 00000
- MOVAB G^GEN_1SIZE, R3 ;GEN_1SIZE, R3 53 00000000G 00 9E 00002
- MOVAB G^U.30, R2 ;U.30, R2 52 00000000V 00 9E 00009
- CLRL (R3) ;GEN_1SIZE 4201 63 D4 00010
- CLRL G^GEN_2SIZE ;GEN_2SIZE 4202 00000000G 00 D4 00012
- CLRL G^GEN_3SIZE ;GEN_3SIZE 4203 00000000G 00 D4 00018
- TSTL G^U.57 ;U.57 4205 00000000' 00 D5 0001E
- BGTR 1$ ;1$ 11 14 00024
- PUSHL #134316226 ;#134316226 4208 080180C2 8F DD 00026
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 0002C
- MOVL #10, R0 ;#10, R0 4209 50 0A D0 00033
- RET ; 04 00036
- 1$: PUSHL #1 ;#1 4212 01 DD 00037
- MOVZWL #1002, -(SP) ;#1002, -(SP) 7E 03EA 8F 3C 00039
- PUSHAB G^GEN_1DATA ;GEN_1DATA 00000000G 00 9F 0003E
- CALLS #3, (R2) ;#3, SET_STRING 62 03 FB 00044
- CALLS #0, G^U.28 ;#0, U.28 4213 00000000V 00 00 FB 00047
- CLRQ -(SP) ;-(SP) 4214 7E 7C 0004E
- CLRL -(SP) ;-(SP) 7E D4 00050
- CALLS #3, (R2) ;#3, SET_STRING 62 03 FB 00052
- MOVL R0, (R3) ;R0, GEN_1SIZE 63 50 D0 00055
- PUSHL #15 ;#15 4215 0F DD 00058
- CALLS #1, G^U.17 ;#1, U.17 00000000V 00 01 FB 0005A
- RET ; 04 00061
-
- ; Routine Size: 98 bytes, Routine Base: $CODE$ + 16A5
-
-
- ; 4217 1 %SBTTL 'KERMIT_COMMAND - perform a KERMIT command'
- ; 4218 1 ROUTINE KERMIT_COMMAND =
- ; 4219 1
- ; 4220 1 !++
- ; 4221 1 ! FUNCTIONAL DESCRIPTION:
- ; 4222 1 !
- ; 4223 1 ! This routine will handle the KERMIT command packet.
- ; 4224 1 ! It will set up the data for the call to the system routine.
- ; 4225 1 !
- ; 4226 1 ! CALLING SEQUENCE:
- ; 4227 1 !
- ; 4228 1 ! STATE = KERMIT_COMMAND();
- ; 4229 1 !
- ; 4230 1 ! INPUT PARAMETERS:
- ; 4231 1 !
- ; 4232 1 ! None.
- ; 4233 1 !
- ; 4234 1 ! IMPLICIT INPUTS:
- ; 4235 1 !
- ; 4236 1 ! Generic message receive in REC_MSG.
- ; 4237 1 !
- ; 4238 1 ! OUTPUT PARAMETERS:
- ; 4239 1 !
- ; 4240 1 ! Returns new state for FSM
- ; 4241 1 !
- ; 4242 1 ! IMPLICIT OUTPUTS:
- ; 4243 1 !
- ; 4244 1 ! None.
- ; 4245 1 !
- ; 4246 1 ! COMPLETION CODES:
- ; 4247 1 !
- ; 4248 1 ! None.
- ; 4249 1 !
- ; 4250 1 ! SIDE EFFECTS:
- ; 4251 1 !
- ; 4252 1 ! None.
- ; 4253 1 !
- ; 4254 1 !--
- ; 4255 1
- ; 4256 2 BEGIN
- ; 4257 2 GEN_1SIZE = 0;
- ; 4258 2 GEN_2SIZE = 0;
- ; 4259 2 GEN_3SIZE = 0;
- ; 4260 2
- ; 4261 2 IF .REC_LENGTH LEQ 0
- ; 4262 2 THEN
- ; 4263 3 BEGIN
- ; 4264 3 KRM_ERROR (KER_PROTOERR); ! Return an error
- ; 4265 3 RETURN STATE_A; ! Just abort
- ; 4266 2 END;
- ; 4267 2
- ; 4268 2 SET_STRING (CH$PTR (GEN_1DATA), MAX_MSG, TRUE); ! Start writing to buffer
- ; 4269 2 BFR_EMPTY (); ! Dump the text
- ; 4270 2 GEN_1SIZE = SET_STRING (0, 0, FALSE); ! Get the result
- ; 4271 2 RETURN CALL_SY_RTN (GC_KERMIT);
- ; 4272 1 END; ! End of KERMIT_COMMAND
-
-
-
-
-
- ;KERMIT_COMMAND
- U.16: .WORD ^M<R2,R3> ;Save R2,R3 4218 000C 00000
- MOVAB G^GEN_1SIZE, R3 ;GEN_1SIZE, R3 53 00000000G 00 9E 00002
- MOVAB G^U.30, R2 ;U.30, R2 52 00000000V 00 9E 00009
- CLRL (R3) ;GEN_1SIZE 4257 63 D4 00010
- CLRL G^GEN_2SIZE ;GEN_2SIZE 4258 00000000G 00 D4 00012
- CLRL G^GEN_3SIZE ;GEN_3SIZE 4259 00000000G 00 D4 00018
- TSTL G^U.57 ;U.57 4261 00000000' 00 D5 0001E
- BGTR 1$ ;1$ 11 14 00024
- PUSHL #134316226 ;#134316226 4264 080180C2 8F DD 00026
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 0002C
- MOVL #10, R0 ;#10, R0 4265 50 0A D0 00033
- RET ; 04 00036
- 1$: PUSHL #1 ;#1 4268 01 DD 00037
- MOVZWL #1002, -(SP) ;#1002, -(SP) 7E 03EA 8F 3C 00039
- PUSHAB G^GEN_1DATA ;GEN_1DATA 00000000G 00 9F 0003E
- CALLS #3, (R2) ;#3, SET_STRING 62 03 FB 00044
- CALLS #0, G^U.28 ;#0, U.28 4269 00000000V 00 00 FB 00047
- CLRQ -(SP) ;-(SP) 4270 7E 7C 0004E
- CLRL -(SP) ;-(SP) 7E D4 00050
- CALLS #3, (R2) ;#3, SET_STRING 62 03 FB 00052
- MOVL R0, (R3) ;R0, GEN_1SIZE 63 50 D0 00055
- PUSHL #16 ;#16 4271 10 DD 00058
- CALLS #1, G^U.17 ;#1, U.17 00000000V 00 01 FB 0005A
- RET ; 04 00061
-
- ; Routine Size: 98 bytes, Routine Base: $CODE$ + 1707
-
-
- ; 4273 1 %SBTTL 'CALL_SY_RTN - handle operating system dependent functions'
- ; 4274 1 ROUTINE CALL_SY_RTN (G_FUNC) =
- ; 4275 1
- ; 4276 1 !++
- ; 4277 1 ! FUNCTIONAL DESCRIPTION:
- ; 4278 1 !
- ; 4279 1 ! This routine will handle calling the operating system dependent routine
- ; 4280 1 ! for a server function and returning the response.
- ; 4281 1 !
- ; 4282 1 ! CALLING SEQUENCE:
- ; 4283 1 !
- ; 4284 1 ! STATE = CALL_SY_RTN(.G_FUNC);
- ; 4285 1 !
- ; 4286 1 ! INPUT PARAMETERS:
- ; 4287 1 !
- ; 4288 1 ! G_FUNC - Generic function code
- ; 4289 1 !
- ; 4290 1 ! IMPLICIT INPUTS:
- ; 4291 1 !
- ; 4292 1 ! Generic message data in GEN_1DATA
- ; 4293 1 !
- ; 4294 1 ! OUTPUT PARAMETERS:
- ; 4295 1 !
- ; 4296 1 ! Returns new state for FSM
- ; 4297 1 !
- ; 4298 1 ! IMPLICIT OUTPUTS:
- ; 4299 1 !
- ; 4300 1 ! None.
- ; 4301 1 !
- ; 4302 1 ! COMPLETION CODES:
- ; 4303 1 !
- ; 4304 1 ! None.
- ; 4305 1 !
- ; 4306 1 ! SIDE EFFECTS:
- ; 4307 1 !
- ; 4308 1 ! None.
- ; 4309 1 !
- ; 4310 1 !--
- ; 4311 1
- ; 4312 2 BEGIN
- ; 4313 2
- ; 4314 2 LOCAL
- ; 4315 2 STRING_ADDRESS, ! Address of string result
- ; 4316 2 STRING_LENGTH, ! Length of string result
- ; 4317 2 GET_CHR_SUBROUTINE, ! Routine to get a response character
- ; 4318 2 STATUS; ! Status value
- ; 4319 2
- ; 4320 2 !
- ; 4321 2 ! Call the routine with the desired type of command.
- ; 4322 2 !
- ; 4323 2 STRING_LENGTH = 0; ! Initialize for no string
- ; 4324 2 GET_CHR_SUBROUTINE = 0; ! And no subroutine
- ; 4325 2
- ; 4326 2 IF NOT SY_GENERIC (.G_FUNC, STRING_ADDRESS, STRING_LENGTH, GET_CHR_SUBROUTINE)
- ; 4327 2 THEN
- ; 4328 2 RETURN STATE_A; ! And abort
- ; 4329 2
- ; 4330 2 IF .STRING_LENGTH GTR 0
- ; 4331 2 THEN
- ; 4332 3 BEGIN
- ; 4333 3 SET_STRING (CH$PTR (.STRING_ADDRESS), .STRING_LENGTH, TRUE);
- ; 4334 3
- ; 4335 3 IF .STRING_LENGTH LSS .SEND_PKT_SIZE - PKT_OVR_HEAD
- ; 4336 3 THEN
- ; 4337 4 BEGIN
- ; 4338 4 BFR_FILL (TRUE); ! If it should fit, pack it in
- ; 4339 4
- ; 4340 4 IF SET_STRING (0, 0, FALSE) GEQ .STRING_LENGTH
- ; 4341 4 THEN ! It fit, so just send the ACK
- ; 4342 4
- ; 4343 4 IF SEND_PACKET (MSG_ACK, .SIZE, .REC_SEQ) THEN RETURN STATE_C ELSE RETURN STATE_EX;
- ; 4344 4
- ; 4345 4 !
- ; 4346 4 ! It didn't fit, reset the pointers to the beginning
- ; 4347 4 !
- ; 4348 4 SET_STRING (CH$PTR (.STRING_ADDRESS), .STRING_LENGTH, TRUE);
- ; 4349 3 END;
- ; 4350 3
- ; 4351 3 NO_FILE_NEEDED = TRUE; ! Don't need a file
- ; 4352 3 END
- ; 4353 2 ELSE
- ; 4354 2
- ; 4355 2 IF .GET_CHR_SUBROUTINE NEQ 0 ! If we got a subroutine back
- ; 4356 2 THEN
- ; 4357 3 BEGIN
- ; 4358 3 GET_CHR_ROUTINE = .GET_CHR_SUBROUTINE;
- ; 4359 3 NO_FILE_NEEDED = TRUE;
- ; 4360 2 END;
- ; 4361 2
- ; 4362 2 TEXT_HEAD_FLAG = TRUE; ! Send to be typed
- ; 4363 2 XFR_STATUS (%C'I', %C'G'); ! Doing a generic command
- ; 4364 2
- ; 4365 2 IF .STATE EQL STATE_II AND .BLK_CHK_TYPE EQL .INI_CHK_TYPE
- ; 4366 2 THEN
- ; 4367 2 RETURN STATE_OF
- ; 4368 2 ELSE
- ; 4369 2 RETURN STATE_S; ! Send the response
- ; 4370 2
- ; 4371 1 END; ! End of CALL_SY_RTN
-
-
-
-
-
- ;CALL_SY_RTN
- U.17: .WORD ^M<R2,R3,R4> ;Save R2,R3,R4 4274 001C 00000
- MOVAB G^U.30, R4 ;U.30, R4 54 00000000V 00 9E 00002
- MOVAB G^U.40, R3 ;U.40, R3 53 00000000' 00 9E 00009
- SUBL2 #4, SP ;#4, SP 5E 04 C2 00010
- CLRQ -(SP) ;GET_CHR_SUBROUTINE 4324 7E 7C 00013
- PUSHL SP ;SP 4326 5E DD 00015
- PUSHAB 8(SP) ;STRING_LENGTH 08 AE 9F 00017
- PUSHAB 16(SP) ;STRING_ADDRESS 10 AE 9F 0001A
- PUSHL 4(AP) ;G_FUNC 04 AC DD 0001D
- CALLS #4, G^SY_GENERIC ;#4, SY_GENERIC 00000000G 00 04 FB 00020
- BLBS R0, 1$ ;R0, 1$ 04 50 E8 00027
- MOVL #10, R0 ;#10, R0 4328 50 0A D0 0002A
- RET ; 04 0002D
- 1$: MOVL 4(SP), R2 ;STRING_LENGTH, R2 4330 52 04 AE D0 0002E
- BLEQ 4$ ;4$ 50 15 00032
- PUSHL #1 ;#1 4333 01 DD 00034
- PUSHL R2 ;R2 52 DD 00036
- PUSHL 16(SP) ;STRING_ADDRESS 10 AE DD 00038
- CALLS #3, (R4) ;#3, SET_STRING 64 03 FB 0003B
- SUBL3 #3, (R3), R0 ;#3, SEND_PKT_SIZE, R0 4335 63 03 C3 0003E
- ; 50 00041
- CMPL R2, R0 ;R2, R0 50 52 D1 00042
- BGEQ 5$ ;5$ 46 18 00045
- PUSHL #1 ;#1 4338 01 DD 00047
- CALLS #1, G^U.29 ;#1, U.29 00000000V 00 01 FB 00049
- CLRQ -(SP) ;-(SP) 4340 7E 7C 00050
- CLRL -(SP) ;-(SP) 7E D4 00052
- CALLS #3, (R4) ;#3, SET_STRING 64 03 FB 00054
- CMPL R0, R2 ;R0, R2 52 50 D1 00057
- BLSS 3$ ;3$ 1C 19 0005A
- PUSHL 64(R3) ;REC_SEQ 4343 40 A3 DD 0005C
- PUSHL 48(R3) ;SIZE 30 A3 DD 0005F
- MOVZBL #89, -(SP) ;#89, -(SP) 7E 59 8F 9A 00062
- CALLS #3, G^U.24 ;#3, U.24 00000000V 00 03 FB 00066
- BLBC R0, 2$ ;R0, 2$ 04 50 E9 0006D
- MOVL #9, R0 ;#9, R0 50 09 D0 00070
- RET ; 04 00073
- 2$: MOVL #19, R0 ;#19, R0 50 13 D0 00074
- RET ; 04 00077
- 3$: PUSHL #1 ;#1 4348 01 DD 00078
- PUSHL R2 ;R2 52 DD 0007A
- PUSHL 16(SP) ;STRING_ADDRESS 10 AE DD 0007C
- CALLS #3, (R4) ;#3, SET_STRING 64 03 FB 0007F
- BRB 5$ ;5$ 4351 09 11 00082
- 4$: TSTL (SP) ;GET_CHR_SUBROUTINE 4355 6E D5 00084
- BEQL 6$ ;6$ 0A 13 00086
- MOVL (SP), 2108(R3) ;GET_CHR_SUBROUTINE, GET_CHR_ROUTINE 4358 083C C3 6E D0 00088
- 5$: MOVL #1, 2092(R3) ;#1, NO_FILE_NEEDED 4359 082C C3 01 D0 0008D
- 6$: MOVL #1, 2088(R3) ;#1, TEXT_HEAD_FLAG 4362 0828 C3 01 D0 00092
- MOVZBL #71, -(SP) ;#71, -(SP) 4363 7E 47 8F 9A 00097
- MOVZBL #73, -(SP) ;#73, -(SP) 7E 49 8F 9A 0009B
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 0009F
- CMPL 44(R3), #15 ;STATE, #15 4365 0F 2C A3 D1 000A6
- BNEQ 7$ ;7$ 0B 12 000AA
- CMPL 32(R3), 28(R3) ;BLK_CHK_TYPE, INI_CHK_TYPE 1C A3 20 A3 D1 000AC
- BNEQ 7$ ;7$ 04 12 000B1
- MOVL #18, R0 ;#18, R0 4367 50 12 D0 000B3
- RET ; 04 000B6
- 7$: MOVL #1, R0 ;#1, R0 4369 50 01 D0 000B7
- RET ; 04 000BA
-
- ; Routine Size: 187 bytes, Routine Base: $CODE$ + 1769
-
-
- ; 4372 1 %SBTTL 'Message processing -- PRS_SEND_INIT - Parse send init params'
- ; 4373 1 ROUTINE PRS_SEND_INIT =
- ; 4374 1
- ; 4375 1 !++
- ; 4376 1 ! FUNCTIONAL DESCRIPTION:
- ; 4377 1 !
- ; 4378 1 ! This routine will parse the SEND_INIT parameters that were sent by
- ; 4379 1 ! the remote Kermit. The items will be stored into the low segment.
- ; 4380 1 !
- ; 4381 1 ! CALLING SEQUENCE:
- ; 4382 1 !
- ; 4383 1 ! PRS_SEND_INIT ();
- ; 4384 1 !
- ; 4385 1 ! INPUT PARAMETERS:
- ; 4386 1 !
- ; 4387 1 ! None.
- ; 4388 1 !
- ; 4389 1 ! IMPLICIT INPUTS:
- ; 4390 1 !
- ; 4391 1 ! Message stored in REC_MSG.
- ; 4392 1 !
- ; 4393 1 ! OUTPUT PARAMETERS:
- ; 4394 1 !
- ; 4395 1 ! None.
- ; 4396 1 !
- ; 4397 1 ! IMPLICIT OUTPUTS:
- ; 4398 1 !
- ; 4399 1 ! None.
- ; 4400 1 !
- ; 4401 1 ! COMPLETION CODES:
- ; 4402 1 !
- ; 4403 1 ! None.
- ; 4404 1 !
- ; 4405 1 ! SIDE EFFECTS:
- ; 4406 1 !
- ; 4407 1 ! None.
- ; 4408 1 !
- ; 4409 1 !--
- ; 4410 1
- ; 4411 2 BEGIN
- ; 4412 2 ! The following section of code will parse the various send parameters
- ; 4413 2 ! that are found in the send-init message. The following code will store
- ; 4414 2 ! the following as the value.
- ; 4415 2 !
- ; 4416 2 ! If the user specified a value then the user supplied value will be used else
- ; 4417 2 ! the value in the message and if none in the message then the default value.
- ; 4418 2 !
- ; 4419 2 ! User supplied values are denoted as positive values in SND_xxxxxxx.
- ; 4420 2 !
- ; 4421 2 ! Parse the packet size
- ; 4422 2 !
- ; 4423 3 SEND_PKT_SIZE = (IF .SND_PKT_SIZE GEQ 0 THEN ! [108]
- ; 4424 3 (IF .SND_PKT_SIZE GTR 94 THEN 94 ELSE .SND_PKT_SIZE) ELSE ! [108]
- ; 4425 4 BEGIN
- ; 4426 4
- ; 4427 4 IF .REC_LENGTH GTR P_SI_BUFSIZ
- ; 4428 4 THEN
- ; P 4429 4 UNCHAR (CH$RCHAR (CH$PTR (REC_MSG,
- ; 4430 5 .RECV_PKT_MSG + P_SI_BUFSIZ, CHR_SIZE))) ! [108]
- ; 4431 4 ELSE
- ; 4432 4 ABS (.SND_PKT_SIZE)
- ; 4433 4
- ; 4434 4 END
- ; 4435 2 );
- ; 4436 2 !
- ; 4437 2 ! Parse the time out value
- ; 4438 2 !
- ; 4439 3 SEND_TIMEOUT = (IF .SND_TIMEOUT GEQ 0 THEN .SND_TIMEOUT ELSE
- ; 4440 4 BEGIN
- ; 4441 4
- ; 4442 4 IF .REC_LENGTH GTR P_SI_TIMOUT
- ; 4443 4 THEN
- ; P 4444 4 UNCHAR (CH$RCHAR (CH$PTR (REC_MSG,
- ; 4445 5 .RECV_PKT_MSG + P_SI_TIMOUT, CHR_SIZE))) ! [108]
- ; 4446 4 ELSE
- ; 4447 4 ABS (.SND_TIMEOUT)
- ; 4448 4
- ; 4449 4 END
- ; 4450 2 );
- ; 4451 2 !
- ; 4452 2 ! Parse the number of padding characters supplied
- ; 4453 2 !
- ; 4454 3 SEND_NPAD = (IF .SND_NPAD GEQ 0 THEN .SND_NPAD ELSE
- ; 4455 4 BEGIN
- ; 4456 4
- ; 4457 4 IF .REC_LENGTH GTR P_SI_NPAD
- ; 4458 4 THEN
- ; P 4459 4 UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_NPAD,
- ; 4460 5 CHR_SIZE))) ! [108]
- ; 4461 4 ELSE
- ; 4462 4 ABS (.SND_NPAD)
- ; 4463 4
- ; 4464 4 END
- ; 4465 2 );
- ; 4466 2 !
- ; 4467 2 ! Parse the padding character
- ; 4468 2 !
- ; 4469 3 SEND_PADCHAR = (IF .SND_PADCHAR GEQ 0 THEN .SND_PADCHAR ELSE
- ; 4470 4 BEGIN
- ; 4471 4
- ; 4472 4 IF .REC_LENGTH GTR P_SI_PAD
- ; 4473 4 THEN
- ; P 4474 4 CTL (CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_PAD,
- ; 4475 5 CHR_SIZE))) ! [108]
- ; 4476 4 ELSE
- ; 4477 4 ABS (.SND_PADCHAR)
- ; 4478 4
- ; 4479 4 END
- ; 4480 2 );
- ; 4481 2 !
- ; 4482 2 ! Parse the end of line character
- ; 4483 2 !
- ; 4484 3 SEND_EOL = (IF .SND_EOL GEQ 0 THEN .SND_EOL ELSE
- ; 4485 4 BEGIN
- ; 4486 4
- ; 4487 4 IF .REC_LENGTH GTR P_SI_EOL
- ; 4488 4 THEN
- ; P 4489 4 UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_EOL,
- ; 4490 5 CHR_SIZE))) ! [108]
- ; 4491 4 ELSE
- ; 4492 4 ABS (.SND_EOL)
- ; 4493 4
- ; 4494 4 END
- ; 4495 2 );
- ; 4496 2 !
- ; 4497 2 ! Parse the quoting character
- ; 4498 2 !
- ; 4499 3 SEND_QUOTE_CHR = (IF .SND_QUOTE_CHR GEQ 0 THEN .SND_QUOTE_CHR ELSE
- ; 4500 4 BEGIN
- ; 4501 4
- ; 4502 4 IF .REC_LENGTH GTR P_SI_QUOTE
- ; 4503 4 THEN
- ; 4504 4 CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_QUOTE, ! [108]
- ; 4505 4 CHR_SIZE))
- ; 4506 4 ELSE
- ; 4507 4 ABS (.SND_QUOTE_CHR)
- ; 4508 4
- ; 4509 4 END
- ; 4510 2 );
- ; 4511 2 !
- ; 4512 2 ! Parse the 8-bit quoting character
- ; 4513 2 !
- ; 4514 2 ! If the character was not included in the packet, assume no eight-bit
- ; 4515 2 ! quoting allowed (we are probably talking to an old version of Kermit).
- ; 4516 2 !
- ; 4517 3 SEND_8QUOTE_CHR = (IF .REC_LENGTH GTR P_SI_8QUOTE THEN CH$RCHAR (CH$PTR (REC_MSG,
- ; 4518 3 .RECV_PKT_MSG + P_SI_8QUOTE, CHR_SIZE)) ELSE %C'N' ! [108] ! Assume no 8-bit quoting allowed
- ; 4519 2 );
- ; 4520 2 !
- ; 4521 2 ! Parse the checksum type
- ; 4522 2 !
- ; 4523 2
- ; 4524 2 IF .REC_LENGTH GTR P_SI_CHKTYPE
- ; 4525 2 THEN
- ; 4526 3 BEGIN
- ; 4527 3
- ; 4528 3 LOCAL
- ; 4529 3 REQ_CHK_TYPE;
- ; 4530 3
- ; 4531 3 REQ_CHK_TYPE = CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + ! [108]
- ; 4532 3 P_SI_CHKTYPE, CHR_SIZE));
- ; 4533 3
- ; 4534 3 IF .REC_TYPE NEQ MSG_ACK
- ; 4535 3 THEN
- ; 4536 3
- ; 4537 3 IF .REQ_CHK_TYPE GEQ CHK_1CHAR AND .REQ_CHK_TYPE LEQ CHK_CRC
- ; 4538 3 THEN
- ; 4539 3 INI_CHK_TYPE = .REQ_CHK_TYPE
- ; 4540 3 ELSE
- ; 4541 3 INI_CHK_TYPE = CHK_1CHAR
- ; 4542 3
- ; 4543 3 ELSE
- ; 4544 3
- ; 4545 3 IF .REQ_CHK_TYPE NEQ .CHKTYPE
- ; 4546 3 THEN
- ; 4547 3 INI_CHK_TYPE = CHK_1CHAR
- ; 4548 3 ELSE
- ; 4549 3 INI_CHK_TYPE = .REQ_CHK_TYPE
- ; 4550 3
- ; 4551 3 END
- ; 4552 2 ELSE
- ; 4553 2 INI_CHK_TYPE = CHK_1CHAR; ! Only single character checksum if not specified
- ; 4554 2
- ; 4555 2 !
- ; 4556 2 ! Parse the repeat character
- ; 4557 2 !
- ; 4558 3 REPT_CHR = (IF .REC_LENGTH GTR P_SI_REPEAT THEN CH$RCHAR (CH$PTR (REC_MSG,
- ; 4559 2 .RECV_PKT_MSG + P_SI_REPEAT, CHR_SIZE)) ELSE %C' '); ! [108]
- ; 4560 2 ! ! [108]
- ; 4561 2 ! Parse the capas field, if present and if we enabled extended length ! [108]
- ; 4562 2 ! ! [108]
- ; 4563 2 ! [108]
- ; 4564 3 IF (.REC_LENGTH GTR P_SI_CAPAS) AND (ABS(.SND_PKT_SIZE) GTR 94) ! [108]
- ; 4565 2 THEN ! [108]
- ; 4566 3 BEGIN ! [108]
- ; 4567 3 ! [108]
- ; 4568 3 LOCAL ! [108]
- ; 4569 3 CAPAS_OFFSET; ! [108]
- ; 4570 3 ! [108]
- ; 4571 3 CAPAS_OFFSET = .RECV_PKT_MSG + P_SI_CAPAS; ! [108]
- ; 4572 3
- ; 4573 3 IF (UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .CAPAS_OFFSET, CHR_SIZE))) AND 2) NEQ 0
- ; 4574 3 THEN ! [108]
- ; 4575 4 BEGIN ! [108]
- ; 4576 4 ! [108]
- ; 4577 4 SEND_PKT_SIZE = 500; ! [108]
- ; 4578 4 ! [108]
- ; 4579 4 WHILE (.REC_LENGTH GTR .CAPAS_OFFSET-.RECV_PKT_MSG) AND ! [108]
- ; P 4580 6 ((UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .CAPAS_OFFSET, ! [108]
- ; 4581 4 CHR_SIZE))) AND 1) EQL 1) DO ! [108]
- ; 4582 5 BEGIN ! [108]
- ; 4583 5 CAPAS_OFFSET = .CAPAS_OFFSET + 1; ! [108]
- ; 4584 4 END; ! [108]
- ; 4585 4 IF .REC_LENGTH GTR .CAPAS_OFFSET-.RECV_PKT_MSG+3 ! [108]
- ; 4586 4 THEN ! [108]
- ; P 4587 4 SEND_PKT_SIZE = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, ! [108]
- ; 4588 4 .CAPAS_OFFSET+2, CHR_SIZE))) * 95 +
- ; P 4589 4 UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, ! [108]
- ; 4590 4 .CAPAS_OFFSET+3, CHR_SIZE))); ! [108]
- ; 4591 4 IF .SEND_PKT_SIZE GTR MAX_MSG - 2 ! [108]
- ; 4592 4 THEN ! [108]
- ; 4593 4 SEND_PKT_SIZE = MAX_MSG - 2; ! [108]
- ; 4594 4 IF .SEND_PKT_SIZE GTR ABS(.SND_PKT_SIZE) ! [108]
- ; 4595 4 THEN ! [108]
- ; 4596 4 SEND_PKT_SIZE = ABS(.SND_PKT_SIZE); ! [108]
- ; 4597 3 END; ! [108]
- ; 4598 2 END; ! [108]
- ; 4599 2 !
- ; 4600 2 ! Check for a valid quoting character. If it is not valid, then we have
- ; 4601 2 ! a protocol error
- ; 4602 2 !
- ; 4603 2
- ; 4604 4 IF NOT ((.SEND_QUOTE_CHR GEQ %O'41' AND .SEND_QUOTE_CHR LEQ %O'76') OR (.SEND_QUOTE_CHR GEQ %O
- ; 4605 3 '140' AND .SEND_QUOTE_CHR LEQ %O'176'))
- ; 4606 2 THEN
- ; 4607 3 BEGIN
- ; 4608 3 KRM_ERROR (KER_PROTOERR);
- ; 4609 3 RETURN KER_PROTOERR;
- ; 4610 2 END;
- ; 4611 2
- ; 4612 2 !
- ; 4613 2 ! Check for a valid 8 bit quoting and set the 8 bit quoting flag as needed
- ; 4614 2 !
- ; 4615 2
- ; 4616 5 IF ( NOT ((.SEND_8QUOTE_CHR GEQ %O'041' AND .SEND_8QUOTE_CHR LEQ %O'076') OR (.SEND_8QUOTE_CHR
- ; 4617 5 GEQ %O'140' AND .SEND_8QUOTE_CHR LEQ %O'176') OR (.SEND_8QUOTE_CHR EQL %C'N') OR (
- ; 4618 2 .SEND_8QUOTE_CHR EQL %C'Y'))) OR .SEND_8QUOTE_CHR EQL .SEND_QUOTE_CHR OR .SEND_8QUOTE_CHR
- ; 4619 2 EQL .RCV_QUOTE_CHR
- ; 4620 2 THEN
- ; 4621 3 BEGIN
- ; 4622 3 KRM_ERROR (KER_PROTOERR);
- ; 4623 3 RETURN KER_PROTOERR;
- ; 4624 2 END;
- ; 4625 2
- ; 4626 2 IF .SEND_8QUOTE_CHR EQL %C'Y' THEN SEND_8QUOTE_CHR = .RECV_8QUOTE_CHR;
- ; 4627 2
- ; 4628 2 IF .SEND_8QUOTE_CHR NEQ %C'N' AND .SEND_8QUOTE_CHR NEQ %C'Y'
- ; 4629 2 THEN
- ; 4630 2 FLAG_8QUOTE = TRUE
- ; 4631 2 ELSE
- ; 4632 2 FLAG_8QUOTE = FALSE;
- ; 4633 2
- ; 4634 2 !
- ; 4635 2 ! Check the repeat character and set flags
- ; 4636 2 !
- ; 4637 2
- ; 4638 5 IF ( NOT ((.REPT_CHR GEQ %O'41' AND .REPT_CHR LEQ %O'76') OR (.REPT_CHR GEQ %O'140' AND
- ; 4639 3 .REPT_CHR LEQ %O'176')) OR .REPT_CHR EQL .SEND_QUOTE_CHR OR .REPT_CHR EQL .SEND_8QUOTE_CHR
- ; 4640 2 OR .REPT_CHR EQL .RCV_QUOTE_CHR) AND .REPT_CHR NEQ %C' '
- ; 4641 2 THEN
- ; 4642 3 BEGIN
- ; 4643 3 KRM_ERROR (KER_PROTOERR);
- ; 4644 3 RETURN KER_PROTOERR;
- ; 4645 2 END;
- ; 4646 2
- ; 4647 2 IF .REPT_CHR NEQ %C' ' THEN FLAG_REPEAT = TRUE ELSE FLAG_REPEAT = FALSE;
- ; 4648 2
- ; 4649 2 RETURN KER_NORMAL;
- ; 4650 1 END; ! End of PRS_SEND_INIT
-
-
-
-
-
- ;PRS_SEND_INIT
- U.21: .WORD ^M<R2,R3,R4,R5,R6> ;Save R2,R3,R4,R5,R6 4373 007C 00000
- MOVAB G^RCV_QUOTE_CHR, R6 ;RCV_QUOTE_CHR, R6 56 00000000G 00 9E 00002
- MOVAB G^U.39, R5 ;U.39, R5 55 00000000' 00 9E 00009
- MOVL G^SND_PKT_SIZE, R4 ;SND_PKT_SIZE, R4 4423 54 00000000G 00 D0 00010
- BLSS 2$ ;2$ 14 19 00017
- CMPL R4, #94 ;R4, #94 4424 0000005E 8F 54 D1 00019
- BLEQ 1$ ;1$ 06 15 00020
- MOVZBL #94, R0 ;#94, R0 50 5E 8F 9A 00022
- BRB 4$ ;4$ 1F 11 00026
- 1$: MOVL R4, R0 ;R4, R0 50 54 D0 00028
- BRB 4$ ;4$ 1A 11 0002B
- 2$: TSTL 72(R5) ;REC_LENGTH 4427 48 A5 D5 0002D
- BLEQ 3$ ;3$ 0D 15 00030
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4430 50 65 D0 00032
- MOVZBL 80(R5)[R0], R0 ;REC_MSG[R0], R0 50 50 A540 9A 00035
- SUBL2 #32, R0 ;#32, R0 50 20 C2 0003A
- BRB 4$ ;4$ 08 11 0003D
- 3$: MOVL R4, R0 ;R4, R0 4432 50 54 D0 0003F
- BGEQ 4$ ;4$ 03 18 00042
- MNEGL R0, R0 ;R0, R0 50 50 CE 00044
- 4$: MOVL R0, 4(R5) ;R0, SEND_PKT_SIZE 4423 04 A5 50 D0 00047
- MOVL G^SND_TIMEOUT, R0 ;SND_TIMEOUT, R0 4439 50 00000000G 00 D0 0004B
- BGEQ 6$ ;6$ 1A 18 00052
- CMPL 72(R5), #1 ;REC_LENGTH, #1 4442 01 48 A5 D1 00054
- BLEQ 5$ ;5$ 0D 15 00058
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4445 50 65 D0 0005A
- MOVZBL 81(R5)[R0], R0 ;REC_MSG+1[R0], R0 50 51 A540 9A 0005D
- SUBL2 #32, R0 ;#32, R0 50 20 C2 00062
- BRB 6$ ;6$ 07 11 00065
- 5$: TSTL R0 ;R0 4447 50 D5 00067
- BGEQ 6$ ;6$ 03 18 00069
- MNEGL R0, R0 ;R0, R0 50 50 CE 0006B
- 6$: MOVL R0, G^SEND_TIMEOUT ;R0, SEND_TIMEOUT 4439 00000000G 00 50 D0 0006E
- MOVL G^SND_NPAD, R0 ;SND_NPAD, R0 4454 50 00000000G 00 D0 00075
- BGEQ 8$ ;8$ 1A 18 0007C
- CMPL 72(R5), #2 ;REC_LENGTH, #2 4457 02 48 A5 D1 0007E
- BLEQ 7$ ;7$ 0D 15 00082
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4460 50 65 D0 00084
- MOVZBL 82(R5)[R0], R0 ;REC_MSG+2[R0], R0 50 52 A540 9A 00087
- SUBL2 #32, R0 ;#32, R0 50 20 C2 0008C
- BRB 8$ ;8$ 07 11 0008F
- 7$: TSTL R0 ;R0 4462 50 D5 00091
- BGEQ 8$ ;8$ 03 18 00093
- MNEGL R0, R0 ;R0, R0 50 50 CE 00095
- 8$: MOVL R0, 8(R5) ;R0, SEND_NPAD 4454 08 A5 50 D0 00098
- MOVL G^SND_PADCHAR, R0 ;SND_PADCHAR, R0 4469 50 00000000G 00 D0 0009C
- BGEQ 10$ ;10$ 1E 18 000A3
- CMPL 72(R5), #3 ;REC_LENGTH, #3 4472 03 48 A5 D1 000A5
- BLEQ 9$ ;9$ 11 15 000A9
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4475 50 65 D0 000AB
- MOVZBL 83(R5)[R0], R0 ;REC_MSG+3[R0], R0 50 53 A540 9A 000AE
- XORL2 #64, R0 ;#64, R0 50 00000040 8F CC 000B3
- BRB 10$ ;10$ 07 11 000BA
- 9$: TSTL R0 ;R0 4477 50 D5 000BC
- BGEQ 10$ ;10$ 03 18 000BE
- MNEGL R0, R0 ;R0, R0 50 50 CE 000C0
- 10$: MOVL R0, 12(R5) ;R0, SEND_PADCHAR 4469 0C A5 50 D0 000C3
- MOVL G^SND_EOL, R0 ;SND_EOL, R0 4484 50 00000000G 00 D0 000C7
- BGEQ 12$ ;12$ 1A 18 000CE
- CMPL 72(R5), #4 ;REC_LENGTH, #4 4487 04 48 A5 D1 000D0
- BLEQ 11$ ;11$ 0D 15 000D4
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4490 50 65 D0 000D6
- MOVZBL 84(R5)[R0], R0 ;REC_MSG+4[R0], R0 50 54 A540 9A 000D9
- SUBL2 #32, R0 ;#32, R0 50 20 C2 000DE
- BRB 12$ ;12$ 07 11 000E1
- 11$: TSTL R0 ;R0 4492 50 D5 000E3
- BGEQ 12$ ;12$ 03 18 000E5
- MNEGL R0, R0 ;R0, R0 50 50 CE 000E7
- 12$: MOVL R0, 16(R5) ;R0, SEND_EOL 4484 10 A5 50 D0 000EA
- MOVL G^SND_QUOTE_CHR, R0 ;SND_QUOTE_CHR, R0 4499 50 00000000G 00 D0 000EE
- BGEQ 14$ ;14$ 17 18 000F5
- CMPL 72(R5), #5 ;REC_LENGTH, #5 4502 05 48 A5 D1 000F7
- BLEQ 13$ ;13$ 0A 15 000FB
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4504 50 65 D0 000FD
- MOVZBL 85(R5)[R0], R0 ;REC_MSG+5[R0], R0 4505 50 55 A540 9A 00100
- BRB 14$ ;14$ 07 11 00105
- 13$: TSTL R0 ;R0 4507 50 D5 00107
- BGEQ 14$ ;14$ 03 18 00109
- MNEGL R0, R0 ;R0, R0 50 50 CE 0010B
- 14$: MOVL R0, 20(R5) ;R0, SEND_QUOTE_CHR 4499 14 A5 50 D0 0010E
- MOVL 72(R5), R3 ;REC_LENGTH, R3 4517 53 48 A5 D0 00112
- CMPL R3, #6 ;R3, #6 06 53 D1 00116
- BLEQ 15$ ;15$ 0A 15 00119
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4518 50 65 D0 0011B
- MOVZBL 86(R5)[R0], R0 ;REC_MSG+6[R0], R0 50 56 A540 9A 0011E
- BRB 16$ ;16$ 04 11 00123
- 15$: MOVZBL #78, R0 ;#78, R0 50 4E 8F 9A 00125
- 16$: MOVL R0, 24(R5) ;R0, SEND_8QUOTE_CHR 4517 18 A5 50 D0 00129
- CMPL R3, #7 ;R3, #7 4524 07 53 D1 0012D
- BLEQ 19$ ;19$ 2D 15 00130
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4532 50 65 D0 00132
- MOVZBL 87(R5)[R0], R0 ;REC_MSG+7[R0], REQ_CHK_TYPE 50 57 A540 9A 00135
- CMPL 76(R5), #89 ;REC_TYPE, #89 4534 00000059 8F 4C A5 D1 0013A
- BEQL 17$ ;17$ 0C 13 00142
- CMPL R0, #49 ;REQ_CHK_TYPE, #49 4537 31 50 D1 00144
- BLSS 19$ ;19$ 16 19 00147
- CMPL R0, #51 ;REQ_CHK_TYPE, #51 33 50 D1 00149
- BGTR 19$ ;19$ 11 14 0014C
- BRB 18$ ;18$ 4539 09 11 0014E
- 17$: CMPL R0, G^CHKTYPE ;REQ_CHK_TYPE, CHKTYPE 4545 00000000G 00 50 D1 00150
- BNEQ 19$ ;19$ 06 12 00157
- 18$: MOVL R0, 32(R5) ;REQ_CHK_TYPE, INI_CHK_TYPE 4549 20 A5 50 D0 00159
- BRB 20$ ;20$ 04 11 0015D
- 19$: MOVL #49, 32(R5) ;#49, INI_CHK_TYPE 4553 20 A5 31 D0 0015F
- 20$: CMPL R3, #8 ;R3, #8 4558 08 53 D1 00163
- BLEQ 21$ ;21$ 0A 15 00166
- MOVL (R5), R0 ;RECV_PKT_MSG, R0 4559 50 65 D0 00168
- MOVZBL 88(R5)[R0], R0 ;REC_MSG+8[R0], R0 50 58 A540 9A 0016B
- BRB 22$ ;22$ 03 11 00170
- 21$: MOVL #32, R0 ;#32, R0 50 20 D0 00172
- 22$: MOVL R0, -4(R5) ;R0, REPT_CHR 4558 FC A5 50 D0 00175
- CMPL R3, #9 ;R3, #9 4564 09 53 D1 00179
- BLEQ 24$ ;24$ 0F 15 0017C
- MOVL R4, R0 ;R4, R0 50 54 D0 0017E
- BGEQ 23$ ;23$ 03 18 00181
- MNEGL R0, R0 ;R0, R0 50 50 CE 00183
- 23$: CMPL R0, #94 ;R0, #94 0000005E 8F 50 D1 00186
- 24$: BLEQ 30$ ;30$ 79 15 0018D
- MOVL (R5), R2 ;RECV_PKT_MSG, R2 4571 52 65 D0 0018F
- MOVAB 9(R2), R0 ;9(R2), CAPAS_OFFSET 50 09 A2 9E 00192
- MOVZBL 80(R5)[R0], R1 ;REC_MSG[CAPAS_OFFSET], R1 4573 51 50 A540 9A 00196
- SUBL2 #32, R1 ;#32, R1 51 20 C2 0019B
- BBC #1, R1, 30$ ;#1, R1, 30$ 51 01 E1 0019E
- ; 66 001A1
- MOVZWL #500, 4(R5) ;#500, SEND_PKT_SIZE 4577 04 A5 01F4 8F 3C 001A2
- 25$: SUBL3 R2, R0, R1 ;R2, CAPAS_OFFSET, R1 4579 50 52 C3 001A8
- ; 51 001AB
- CMPL R3, R1 ;R3, R1 51 53 D1 001AC
- BLEQ 26$ ;26$ 0F 15 001AF
- MOVZBL 80(R5)[R0], R1 ;REC_MSG[CAPAS_OFFSET], R1 4581 51 50 A540 9A 001B1
- SUBL2 #32, R1 ;#32, R1 51 20 C2 001B6
- BLBC R1, 26$ ;R1, 26$ 04 51 E9 001B9
- INCL R0 ;CAPAS_OFFSET 4583 50 D6 001BC
- BRB 25$ ;25$ E8 11 001BE
- 26$: SUBL3 R2, R0, R1 ;R2, CAPAS_OFFSET, R1 4585 50 52 C3 001C0
- ; 51 001C3
- ADDL2 #3, R1 ;#3, R1 51 03 C0 001C4
- CMPL R3, R1 ;R3, R1 51 53 D1 001C7
- BLEQ 27$ ;27$ 1A 15 001CA
- MOVZBL 82(R5)[R0], R1 ;REC_MSG+2[CAPAS_OFFSET], R1 4588 51 52 A540 9A 001CC
- MULL2 #95, R1 ;#95, R1 51 0000005F 8F C4 001D1
- MOVZBL 83(R5)[R0], R2 ;REC_MSG+3[CAPAS_OFFSET], R2 4590 52 53 A540 9A 001D8
- ADDL2 R2, R1 ;R2, R1 51 52 C0 001DD
- MOVAB -3072(R1), 4(R5) ;-3072(R1), SEND_PKT_SIZE 04 A5 F400 C1 9E 001E0
- 27$: CMPL 4(R5), #1000 ;SEND_PKT_SIZE, #1000 4591 000003E8 8F 04 A5 D1 001E6
- BLEQ 28$ ;28$ 06 15 001EE
- MOVZWL #1000, 4(R5) ;#1000, SEND_PKT_SIZE 4593 04 A5 03E8 8F 3C 001F0
- 28$: MOVL R4, R0 ;R4, R0 4594 50 54 D0 001F6
- BGEQ 29$ ;29$ 03 18 001F9
- MNEGL R0, R0 ;R0, R0 50 50 CE 001FB
- 29$: CMPL 4(R5), R0 ;SEND_PKT_SIZE, R0 50 04 A5 D1 001FE
- BLEQ 30$ ;30$ 04 15 00202
- MOVL R0, 4(R5) ;R0, SEND_PKT_SIZE 4596 04 A5 50 D0 00204
- 30$: MOVL 20(R5), R0 ;SEND_QUOTE_CHR, R0 4604 50 14 A5 D0 00208
- CMPL R0, #33 ;R0, #33 21 50 D1 0020C
- BLSS 31$ ;31$ 05 19 0020F
- CMPL R0, #62 ;R0, #62 3E 50 D1 00211
- BLEQ 34$ ;34$ 15 15 00214
- 31$: CMPL R0, #96 ;R0, #96 4605 00000060 8F 50 D1 00216
- BGEQ 33$ ;33$ 03 18 0021D
- 32$: BRW 44$ ;44$ 00A9 31 0021F
- 33$: CMPL R0, #126 ;R0, #126 0000007E 8F 50 D1 00222
- BGTR 32$ ;32$ F4 14 00229
- 34$: MOVL 24(R5), R0 ;SEND_8QUOTE_CHR, R0 4616 50 18 A5 D0 0022B
- CMPL R0, #33 ;R0, #33 21 50 D1 0022F
- BLSS 35$ ;35$ 05 19 00232
- CMPL R0, #62 ;R0, #62 3E 50 D1 00234
- BLEQ 37$ ;37$ 24 15 00237
- 35$: CMPL R0, #96 ;R0, #96 4617 00000060 8F 50 D1 00239
- BLSS 36$ ;36$ 09 19 00240
- CMPL R0, #126 ;R0, #126 0000007E 8F 50 D1 00242
- BLEQ 37$ ;37$ 12 15 00249
- 36$: CMPL R0, #78 ;R0, #78 0000004E 8F 50 D1 0024B
- BEQL 37$ ;37$ 09 13 00252
- CMPL R0, #89 ;R0, #89 4618 00000059 8F 50 D1 00254
- BNEQ 44$ ;44$ 6E 12 0025B
- 37$: CMPL R0, 20(R5) ;R0, SEND_QUOTE_CHR 14 A5 50 D1 0025D
- BEQL 44$ ;44$ 68 13 00261
- CMPL R0, (R6) ;R0, RCV_QUOTE_CHR 4619 66 50 D1 00263
- BEQL 44$ ;44$ 63 13 00266
- CMPL 24(R5), #89 ;SEND_8QUOTE_CHR, #89 4626 00000059 8F 18 A5 D1 00268
- BNEQ 38$ ;38$ 05 12 00270
- MOVL -8(R5), 24(R5) ;RECV_8QUOTE_CHR, SEND_8QUOTE_CHR 18 A5 F8 A5 D0 00272
- 38$: MOVL 24(R5), R1 ;SEND_8QUOTE_CHR, R1 4628 51 18 A5 D0 00277
- CMPL R1, #78 ;R1, #78 0000004E 8F 51 D1 0027B
- BEQL 39$ ;39$ 0F 13 00282
- CMPL R1, #89 ;R1, #89 00000059 8F 51 D1 00284
- BEQL 39$ ;39$ 06 13 0028B
- MOVL #1, 40(R5) ;#1, FLAG_8QUOTE 4630 28 A5 01 D0 0028D
- BRB 40$ ;40$ 03 11 00291
- 39$: CLRL 40(R5) ;FLAG_8QUOTE 4632 28 A5 D4 00293
- 40$: MOVL -4(R5), R0 ;REPT_CHR, R0 4638 50 FC A5 D0 00296
- CMPL R0, #33 ;R0, #33 21 50 D1 0029A
- BLSS 41$ ;41$ 05 19 0029D
- CMPL R0, #62 ;R0, #62 3E 50 D1 0029F
- BLEQ 42$ ;42$ 12 15 002A2
- 41$: CMPL R0, #96 ;R0, #96 00000060 8F 50 D1 002A4
- BLSS 43$ ;43$ 19 19 002AB
- CMPL R0, #126 ;R0, #126 4639 0000007E 8F 50 D1 002AD
- BGTR 43$ ;43$ 10 14 002B4
- 42$: CMPL R0, 20(R5) ;R0, SEND_QUOTE_CHR 14 A5 50 D1 002B6
- BEQL 43$ ;43$ 0A 13 002BA
- CMPL R0, R1 ;R0, R1 51 50 D1 002BC
- BEQL 43$ ;43$ 05 13 002BF
- CMPL R0, (R6) ;R0, RCV_QUOTE_CHR 4640 66 50 D1 002C1
- BNEQ 45$ ;45$ 1A 12 002C4
- 43$: CMPL R0, #32 ;R0, #32 20 50 D1 002C6
- BEQL 45$ ;45$ 15 13 002C9
- 44$: PUSHL #134316226 ;#134316226 4643 080180C2 8F DD 002CB
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 002D1
- MOVL #134316226, R0 ;#134316226, R0 4644 50 080180C2 8F D0 002D8
- RET ; 04 002DF
- 45$: CMPL -4(R5), #32 ;REPT_CHR, #32 4647 20 FC A5 D1 002E0
- BEQL 46$ ;46$ 06 13 002E4
- MOVL #1, 44(R5) ;#1, FLAG_REPEAT 2C A5 01 D0 002E6
- BRB 47$ ;47$ 03 11 002EA
- 46$: CLRL 44(R5) ;FLAG_REPEAT 2C A5 D4 002EC
- 47$: MOVL #134316043, R0 ;#134316043, R0 4649 50 0801800B 8F D0 002EF
- RET ; 04 002F6
-
- ; Routine Size: 759 bytes, Routine Base: $CODE$ + 1824
-
-
- ; 4651 1 %SBTTL 'SET_SEND_INIT'
- ; 4652 1 ROUTINE SET_SEND_INIT : NOVALUE =
- ; 4653 1
- ; 4654 1 !++
- ; 4655 1 ! FUNCTIONAL DESCRIPTION:
- ; 4656 1 !
- ; 4657 1 ! This routine will initialize the various parameters for the
- ; 4658 1 ! MSG_SND_INIT message.
- ; 4659 1 !
- ; 4660 1 ! CALLING SEQUENCE:
- ; 4661 1 !
- ; 4662 1 ! SET_SEND_INIT();
- ; 4663 1 !
- ; 4664 1 ! INPUT PARAMETERS:
- ; 4665 1 !
- ; 4666 1 ! None.
- ; 4667 1 !
- ; 4668 1 ! IMPLICIT INPUTS:
- ; 4669 1 !
- ; 4670 1 ! None.
- ; 4671 1 !
- ; 4672 1 ! OUTPUT PARAMETERS:
- ; 4673 1 !
- ; 4674 1 ! None.
- ; 4675 1 !
- ; 4676 1 ! IMPLICIT OUTPUTS:
- ; 4677 1 !
- ; 4678 1 ! SND_MSG parameters set up.
- ; 4679 1 !
- ; 4680 1 ! COMPLETION CODES:
- ; 4681 1 !
- ; 4682 1 ! None.
- ; 4683 1 !
- ; 4684 1 ! SIDE EFFECTS:
- ; 4685 1 !
- ; 4686 1 ! None.
- ; 4687 1 !
- ; 4688 1 !--
- ; 4689 1
- ; 4690 2 BEGIN
- ; 4691 2 CH$WCHAR (CHAR ((IF .RCV_PKT_SIZE LSS 94 THEN .RCV_PKT_SIZE ELSE 94)),
- ; 4692 2 CH$PTR (SND_MSG, PKT_MSG + P_SI_BUFSIZ, CHR_SIZE)); ! [108]
- ; 4693 2 CH$WCHAR (CHAR (.RCV_TIMEOUT), CH$PTR (SND_MSG, PKT_MSG + P_SI_TIMOUT,
- ; 4694 2 CHR_SIZE));
- ; 4695 2 CH$WCHAR (CHAR (.RCV_NPAD), CH$PTR (SND_MSG, PKT_MSG + P_SI_NPAD,
- ; 4696 2 CHR_SIZE));
- ; 4697 2 CH$WCHAR (CTL (.RCV_PADCHAR), CH$PTR (SND_MSG, PKT_MSG + P_SI_PAD,
- ; 4698 2 CHR_SIZE));
- ; 4699 2 CH$WCHAR (CHAR (.RCV_EOL), CH$PTR (SND_MSG, PKT_MSG + P_SI_EOL, CHR_SIZE));
- ; 4700 2 CH$WCHAR (.RCV_QUOTE_CHR, CH$PTR (SND_MSG, PKT_MSG + P_SI_QUOTE, CHR_SIZE));
- ; 4701 2 CH$WCHAR (.SEND_8QUOTE_CHR, CH$PTR (SND_MSG, PKT_MSG + P_SI_8QUOTE,
- ; 4702 2 CHR_SIZE));
- ; 4703 2 CH$WCHAR (.INI_CHK_TYPE, CH$PTR (SND_MSG, PKT_MSG + P_SI_CHKTYPE,
- ; 4704 2 CHR_SIZE));
- ; 4705 2 CH$WCHAR (.REPT_CHR, CH$PTR (SND_MSG, PKT_MSG + P_SI_REPEAT, CHR_SIZE));
- ; 4706 2 SEND_INIT_SIZE = P_SI_LENGTH; ! [108]
- ; 4707 2 IF .RCV_PKT_SIZE GTR 94 ! [108]
- ; 4708 2 THEN ! [108]
- ; 4709 3 BEGIN ! [108]
- ; 4710 3 CH$WCHAR (CHAR (EXTLEN_CAPAS), CH$PTR (SND_MSG, PKT_MSG + P_SI_CAPAS,
- ; 4711 3 CHR_SIZE));
- ; 4712 3 CH$WCHAR (CHAR (0), CH$PTR (SND_MSG, PKT_MSG + P_SI_WINDO, CHR_SIZE));
- ; 4713 3 CH$WCHAR (CHAR (.RCV_PKT_SIZE/95), CH$PTR (SND_MSG, PKT_MSG + P_SI_MAXLX1,
- ; 4714 3 CHR_SIZE));
- ; 4715 3 CH$WCHAR (CHAR (.RCV_PKT_SIZE MOD 95), CH$PTR (SND_MSG, PKT_MSG + P_SI_MAXLX2,
- ; 4716 3 CHR_SIZE));
- ; 4717 3 ! [108]
- ; 4718 3 SEND_INIT_SIZE = P_SI_XLENGTH; ! [108]
- ; 4719 2 END; ! [108]
- ; 4720 2
- ; 4721 1 END; ! End of SET_SEND_INIT
-
-
-
-
-
- ;SET_SEND_INIT
- U.20: .WORD ^M<R2> ;Save R2 4652 0004 00000
- MOVAB G^U.46, R2 ;U.46, R2 52 00000000' 00 9E 00002
- MOVL G^RCV_PKT_SIZE, R1 ;RCV_PKT_SIZE, R1 4691 51 00000000G 00 D0 00009
- CMPL R1, #94 ;R1, #94 0000005E 8F 51 D1 00010
- BGEQ 1$ ;1$ 05 18 00017
- MOVL R1, R0 ;R1, R0 50 51 D0 00019
- BRB 2$ ;2$ 04 11 0001C
- 1$: MOVZBL #94, R0 ;#94, R0 50 5E 8F 9A 0001E
- 2$: ADDB3 #32, R0, 1060(R2) ;#32, R0, SND_MSG+4 50 20 81 00022
- ; 0424 C2 00025
- ADDB3 #32, G^RCV_TIMEOUT, 1061(R2) ;#32, RCV_TIMEOUT, SND_MSG+5 4693 00000000G 00 20 81 00028
- ; 0425 C2 0002F
- ADDB3 #32, G^RCV_NPAD, 1062(R2) ;#32, RCV_NPAD, SND_MSG+6 4695 00000000G 00 20 81 00032
- ; 0426 C2 00039
- XORB3 #64, G^RCV_PADCHAR, 1063(R2) ;#64, RCV_PADCHAR, SND_MSG+7 4697 00000000G 00 40 8F 8D 0003C
- ; 0427 C2 00044
- ADDB3 #32, G^RCV_EOL, 1064(R2) ;#32, RCV_EOL, SND_MSG+8 4699 00000000G 00 20 81 00047
- ; 0428 C2 0004E
- MOVB G^RCV_QUOTE_CHR, 1065(R2) ;RCV_QUOTE_CHR, SND_MSG+9 4700 0429 C2 00000000G 00 90 00051
- MOVB -4(R2), 1066(R2) ;SEND_8QUOTE_CHR, SND_MSG+10 4702 042A C2 FC A2 90 0005A
- MOVB 4(R2), 1067(R2) ;INI_CHK_TYPE, SND_MSG+11 4704 042B C2 04 A2 90 00060
- MOVB -32(R2), 1068(R2) ;REPT_CHR, SND_MSG+12 4705 042C C2 E0 A2 90 00066
- MOVL #9, (R2) ;#9, SEND_INIT_SIZE 4706 62 09 D0 0006C
- CMPL R1, #94 ;R1, #94 4707 0000005E 8F 51 D1 0006F
- BLEQ 3$ ;3$ 2C 15 00076
- MOVW #8226, 1069(R2) ;#8226, SND_MSG+13 4711 042D C2 2022 8F B0 00078
- DIVL3 #95, R1, R0 ;#95, R1, R0 4713 51 0000005F 8F C7 0007F
- ; 50 00086
- ADDB3 #32, R0, 1071(R2) ;#32, R0, SND_MSG+15 50 20 81 00087
- ; 042F C2 0008A
- EMUL #1, R1, #0, -(SP) ;#1, R1, #0, -(SP) 4715 51 01 7A 0008D
- ; 7E 00 00090
- EDIV #95, (SP)+, R0, R0 ;#95, (SP)+, R0, R0 8E 0000005F 8F 7B 00092
- ; 50 50 00099
- ADDB3 #32, R0, 1072(R2) ;#32, R0, SND_MSG+16 50 20 81 0009B
- ; 0430 C2 0009E
- MOVL #13, (R2) ;#13, SEND_INIT_SIZE 4718 62 0D D0 000A1
- 3$: RET ; 4721 04 000A4
-
- ; Routine Size: 165 bytes, Routine Base: $CODE$ + 1B1B
-
-
- ; 4722 1 %SBTTL 'SEND_PACKET'
- ; 4723 1 ROUTINE SEND_PACKET (TYPE, LENGTH, MN) =
- ; 4724 1
- ; 4725 1 !++
- ; 4726 1 ! FUNCTIONAL DESCRIPTION:
- ; 4727 1 !
- ; 4728 1 ! This routine will cause a packet to be sent over the line
- ; 4729 1 ! that has been opened by OPEN_TERMINAL.
- ; 4730 1 !
- ; 4731 1 ! CALLING SEQUENCE:
- ; 4732 1 !
- ; 4733 1 ! SEND_PACKET(Type, Length);
- ; 4734 1 !
- ; 4735 1 ! INPUT PARAMETERS:
- ; 4736 1 !
- ; 4737 1 ! TYPE - Type of packet to send.
- ; 4738 1 !
- ; 4739 1 ! LENGTH - Length of the packet being sent.
- ; 4740 1 ! [108] Negative length means it's an extended length packet
- ; 4741 1 !
- ; 4742 1 ! IMPLICIT INPUTS:
- ; 4743 1 !
- ; 4744 1 ! None.
- ; 4745 1 !
- ; 4746 1 ! OUTPUT PARAMETERS:
- ; 4747 1 !
- ; 4748 1 ! None.
- ; 4749 1 !
- ; 4750 1 ! IMPLICIT OUTPUTS:
- ; 4751 1 !
- ; 4752 1 ! None.
- ; 4753 1 !
- ; 4754 1 ! COMPLETION CODES:
- ; 4755 1 !
- ; 4756 1 ! None.
- ; 4757 1 !
- ; 4758 1 ! SIDE EFFECTS:
- ; 4759 1 !
- ; 4760 1 ! None.
- ; 4761 1 !
- ; 4762 1 !--
- ; 4763 1
- ; 4764 2 BEGIN
- ; 4765 2
- ; 4766 2 LOCAL
- ; 4767 2 FILLER : VECTOR [CH$ALLOCATION (MAX_MSG, CHR_SIZE)],
- ; 4768 2 TOT_MSG_LEN, ! Length of message including all characters
- ; 4769 2 CHKSUM, ! Checksum for the message we calculate
- ; 4770 2 POINTER; ! Pointer to the information in the message
- ; 4771 2
- ; 4772 2 !
- ; 4773 2 ! Do any filler processing that the remote KERMIT requires.
- ; 4774 2 !
- ; 4775 2
- ; 4776 2 IF .SEND_NPAD NEQ 0
- ; 4777 2 THEN
- ; 4778 3 BEGIN
- ; 4779 3 CH$FILL (.SEND_PADCHAR, MAX_MSG, CH$PTR (FILLER, 0, CHR_SIZE));
- ; 4780 3 !
- ; 4781 3 ! Update the send stats
- ; 4782 3 !
- ; 4783 3 SMSG_TOTAL_CHARS = .SMSG_TOTAL_CHARS + .SEND_NPAD;
- ; 4784 3 !
- ; 4785 3 ! Send the fill
- ; 4786 3 !
- ; 4787 3 DO_PARITY (FILLER, .SEND_NPAD + PKT_TOT_OVR_HEAD);
- ; 4788 3 SEND (FILLER, .SEND_NPAD + PKT_TOT_OVR_HEAD);
- ; 4789 2 END;
- ; 4790 2
- ; 4791 2 !
- ; 4792 2 ! Store the header information into the message.
- ; 4793 2 !
- ; 4794 2 CH$WCHAR (.TYPE, CH$PTR (SND_MSG, PKT_TYPE, CHR_SIZE));
- ; 4795 2 CH$WCHAR (.SND_SOH, CH$PTR (SND_MSG, PKT_MARK, CHR_SIZE));
- ; 4796 2 CH$WCHAR (CHAR (IF .MN LSS 0 THEN 0 ELSE .MN), CH$PTR (SND_MSG, PKT_SEQ,
- ; 4797 2 CHR_SIZE));
- ; 4798 2
- ; 4799 2 IF .LENGTH LSS 0 ! [108]
- ; 4800 2 THEN ! [108]
- ; 4801 3 BEGIN ! [108]
- ; 4802 3 TOT_MSG_LEN = PKT_OVR_HEAD + 3 - .LENGTH; ! [108]
- ; 4803 3 CH$WCHAR (CHAR (0), CH$PTR (SND_MSG, PKT_COUNT, CHR_SIZE)); ! [108]
- ; P 4804 3 CH$WCHAR (CHAR ((.TOT_MSG_LEN - PKT_HCHECK + 1 + ! [108]
- ; 4805 3 (.BLK_CHK_TYPE - CHK_1CHAR)) / 95), ! [108]
- ; 4806 3 CH$PTR (SND_MSG, PKT_COUNTX1, CHR_SIZE)); ! [108]
- ; P 4807 3 CH$WCHAR (CHAR ((.TOT_MSG_LEN - PKT_HCHECK + 1 + ! [108]
- ; 4808 3 (.BLK_CHK_TYPE - CHK_1CHAR)) MOD 95), ! [108]
- ; 4809 3 CH$PTR (SND_MSG, PKT_COUNTX2, CHR_SIZE)); ! [108]
- ; 4810 3
- ; 4811 3 POINTER = CH$PTR(SND_MSG, PKT_SEQ, CHR_SIZE); ! [108]
- ; 4812 3 CHKSUM = CHAR (0) + CH$RCHAR_A (POINTER); ! [108]
- ; 4813 3 CHKSUM = .CHKSUM + CH$RCHAR_A (POINTER); ! [108]
- ; 4814 3 CHKSUM = .CHKSUM + CH$RCHAR_A (POINTER); ! [108]
- ; 4815 3 CHKSUM = .CHKSUM + CH$RCHAR_A (POINTER); ! [108]
- ; 4816 3
- ; 4817 3 CH$WCHAR (CHAR ((.CHKSUM + ((.CHKSUM AND %O'300')/%O'100')) AND %O'77'),
- ; 4818 3 CH$PTR (SND_MSG, PKT_HCHECK, CHR_SIZE)); ! [108]
- ; 4819 3 END ! [108]
- ; 4820 2 ELSE ! [108]
- ; 4821 3 BEGIN ! [108]
- ; 4822 3 TOT_MSG_LEN = PKT_OVR_HEAD + .LENGTH; ! [108]
- ; 4823 3 CH$WCHAR (CHAR (.TOT_MSG_LEN + (.BLK_CHK_TYPE - CHK_1CHAR)), ! [108]
- ; 4824 3 CH$PTR (SND_MSG, PKT_COUNT, CHR_SIZE));
- ; 4825 2 END; ! [108]
- ; 4826 2
- ; 4827 2 !
- ; 4828 2 ! Calculate the block check value
- ; 4829 2 !
- ; 4830 2 POINTER = CH$PTR (SND_MSG, PKT_MARK + 1, CHR_SIZE);
- ; 4831 2 CHKSUM = CALC_BLOCK_CHECK (.POINTER, .TOT_MSG_LEN); ! [108]
- ; 4832 2 !
- ; 4833 2 ! Store the checksum into the message
- ; 4834 2 !
- ; 4835 2 POINTER = CH$PTR (SND_MSG, .TOT_MSG_LEN + 1, CHR_SIZE); ! [108]
- ; 4836 2
- ; 4837 2 CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
- ; 4838 2 SET
- ; 4839 2
- ; 4840 2 [CHK_1CHAR] :
- ; 4841 2 CH$WCHAR_A (CHAR (.CHKSUM), POINTER);
- ; 4842 2
- ; 4843 2 [CHK_2CHAR] :
- ; 4844 3 BEGIN
- ; 4845 3 CH$WCHAR_A (CHAR (.CHKSUM<6, 6>), POINTER);
- ; 4846 3 CH$WCHAR_A (CHAR (.CHKSUM<0, 6>), POINTER);
- ; 4847 3 TOT_MSG_LEN = .TOT_MSG_LEN + 1;
- ; 4848 2 END;
- ; 4849 2
- ; 4850 2 [CHK_CRC] :
- ; 4851 3 BEGIN
- ; 4852 3 CH$WCHAR_A (CHAR (.CHKSUM<12, 4>), POINTER);
- ; 4853 3 CH$WCHAR_A (CHAR (.CHKSUM<6, 6>), POINTER);
- ; 4854 3 CH$WCHAR_A (CHAR (.CHKSUM<0, 6>), POINTER);
- ; 4855 3 TOT_MSG_LEN = .TOT_MSG_LEN + 2;
- ; 4856 2 END;
- ; 4857 2 TES;
- ; 4858 2
- ; 4859 2 !
- ; 4860 2 ! Store in the end of line character
- ; 4861 2 !
- ; 4862 2 CH$WCHAR_A (.SEND_EOL, POINTER);
- ; 4863 2 !
- ; 4864 2 ! If we are debugging then type out the message we are sending.
- ; 4865 2 !
- ; 4866 2 DBG_SEND (SND_MSG, (.TOT_MSG_LEN + PKT_TOT_OVR_HEAD - PKT_OVR_HEAD));! [108]
- ; 4867 2 !
- ; 4868 2 ! Update the stats for total characters and the data characters
- ; 4869 2 !
- ; 4870 2 SMSG_TOTAL_CHARS = .SMSG_TOTAL_CHARS + .TOT_MSG_LEN + PKT_TOT_OVR_HEAD -
- ; 4871 2 PKT_OVR_HEAD; ! [108]
- ; 4872 2 ! Make data characters really be that, not just characters in data field
- ; 4873 2 ! SMSG_DATA_CHARS = .SMSG_DATA_CHARS + .LENGTH;
- ; 4874 2
- ; 4875 2 IF .TYPE EQL MSG_NAK
- ; 4876 2 THEN
- ; 4877 3 BEGIN
- ; 4878 3 SMSG_NAKS = .SMSG_NAKS + 1;
- ; 4879 3 XFR_STATUS (%C'S', %C'N');
- ; 4880 3 END
- ; 4881 2 ELSE
- ; 4882 3 BEGIN
- ; 4883 3 SMSG_COUNT = .SMSG_COUNT + 1;
- ; 4884 3 XFR_STATUS (%C'S', %C'P');
- ; 4885 2 END;
- ; 4886 2
- ; 4887 2 !
- ; 4888 2 ! Check if we are in IBM mode and need to wait for an XON first
- ; 4889 2 ! We will not wait if this is a packet which might be going out
- ; 4890 2 ! without previous traffic (generic commands, init packets).
- ; 4891 2
- ; 4892 3 IF (.IBM_CHAR GEQ 0) ! If handshaking on
- ; 4893 2 THEN
- ; 4894 2 IF NOT IBM_WAIT () THEN RETURN KER_ABORTED;
- ; 4895 2
- ; 4896 2 !
- ; 4897 2 ! Now call the O/S routine to send the message out to the remote KERMIT
- ; 4898 2 !
- ; 4899 2 DO_PARITY (SND_MSG, .TOT_MSG_LEN + PKT_TOT_OVR_HEAD - PKT_OVR_HEAD); ! [108]
- ; 4900 2 RETURN SEND (SND_MSG, .TOT_MSG_LEN + PKT_TOT_OVR_HEAD - PKT_OVR_HEAD); ! [108]
- ; 4901 1 END; ! End of SEND_PACKET
-
-
-
-
-
- ;SEND_PACKET
- U.24: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10> ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10 4723 07FC 00000
- MOVAB G^SEND, R10 ;SEND, R10 5A 00000000G 00 9E 00002
- MOVAB G^U.22, R9 ;U.22, R9 59 00000000V 00 9E 00009
- MOVAB G^SMSG_TOTAL_CHARS, R8 ;SMSG_TOTAL_CHARS, R8 58 00000000G 00 9E 00010
- MOVAB G^U.60, R7 ;U.60, R7 57 00000000' 00 9E 00017
- MOVAB -1004(SP), SP ;-1004(SP), SP 5E FC14 CE 9E 0001E
- MOVL -1076(R7), R6 ;SEND_NPAD, R6 4776 56 FBCC C7 D0 00023
- BEQL 1$ ;1$ 22 13 00028
- MOVC5 #0, (SP), -1072(R7), #1002, (SP) ;#0, (SP), SEND_PADCHAR, #1002, - 4779 6E 00 2C 0002A
- ;FILLER 03EA 8F FBD0 C7 0002D
- ; 6E 00033
- ADDL2 R6, (R8) ;R6, SMSG_TOTAL_CHARS 4783 68 56 C0 00034
- PUSHAB 6(R6) ;6(R6) 4787 06 A6 9F 00037
- PUSHAB 4(SP) ;FILLER 04 AE 9F 0003A
- CALLS #2, (R9) ;#2, DO_PARITY 69 02 FB 0003D
- ADDL3 #6, -1076(R7), -(SP) ;#6, SEND_NPAD, -(SP) 4788 FBCC C7 06 C1 00040
- ; 7E 00045
- PUSHAB 4(SP) ;FILLER 04 AE 9F 00046
- CALLS #2, (R10) ;#2, SEND 6A 02 FB 00049
- 1$: MOVB 4(AP), 3(R7) ;TYPE, SND_MSG+3 4794 03 A7 04 AC 90 0004C
- MOVB G^SND_SOH, (R7) ;SND_SOH, SND_MSG 4795 67 00000000G 00 90 00051
- TSTL 12(AP) ;MN 4796 0C AC D5 00058
- BGEQ 2$ ;2$ 04 18 0005B
- CLRL R0 ;R0 50 D4 0005D
- BRB 3$ ;3$ 04 11 0005F
- 2$: MOVL 12(AP), R0 ;MN, R0 50 0C AC D0 00061
- 3$: ADDB3 #32, R0, 2(R7) ;#32, R0, SND_MSG+2 50 20 81 00065
- ; 02 A7 00068
- SUBL3 #49, -1048(R7), R0 ;#49, BLK_CHK_TYPE, R0 4805 FBE8 C7 31 C3 0006A
- ; 50 0006F
- MOVL 8(AP), R2 ;LENGTH, R2 4799 52 08 AC D0 00070
- BGEQ 4$ ;4$ 68 18 00074
- SUBL3 R2, #6, R2 ;R2, #6, TOT_MSG_LEN 4802 06 52 C3 00076
- ; 52 00079
- MOVB #32, 1(R7) ;#32, SND_MSG+1 4803 01 A7 20 90 0007A
- MOVAB -5(R0)[R2], R0 ;-5(R0)[TOT_MSG_LEN], R0 4805 50 FB A042 9E 0007E
- DIVL3 #95, R0, R1 ;#95, R0, R1 50 0000005F 8F C7 00083
- ; 51 0008A
- ADDB3 #32, R1, 4(R7) ;#32, R1, SND_MSG+4 51 20 81 0008B
- ; 04 A7 0008E
- EMUL #1, R0, #0, -(SP) ;#1, R0, #0, -(SP) 4808 50 01 7A 00090
- ; 7E 00 00093
- EDIV #95, (SP)+, R0, R0 ;#95, (SP)+, R0, R0 8E 0000005F 8F 7B 00095
- ; 50 50 0009C
- ADDB3 #32, R0, 5(R7) ;#32, R0, SND_MSG+5 50 20 81 0009E
- ; 05 A7 000A1
- MOVAB 2(R7), R3 ;SND_MSG+2, POINTER 4811 53 02 A7 9E 000A3
- MOVZBL (R3)+, R0 ;(POINTER)+, R0 4812 50 83 9A 000A7
- MOVAB 32(R0), R1 ;32(R0), CHKSUM 51 20 A0 9E 000AA
- MOVZBL (R3)+, R0 ;(POINTER)+, R0 4813 50 83 9A 000AE
- ADDL2 R0, R1 ;R0, CHKSUM 51 50 C0 000B1
- MOVZBL (R3)+, R0 ;(POINTER)+, R0 4814 50 83 9A 000B4
- ADDL2 R0, R1 ;R0, CHKSUM 51 50 C0 000B7
- MOVZBL (R3)+, R0 ;(POINTER)+, R0 4815 50 83 9A 000BA
- ADDL2 R0, R1 ;R0, CHKSUM 51 50 C0 000BD
- BICL3 #-193, R1, R0 ;#-193, CHKSUM, R0 4817 51 FFFFFF3F 8F CB 000C0
- ; 50 000C7
- DIVL2 #64, R0 ;#64, R0 50 00000040 8F C6 000C8
- ADDL2 R1, R0 ;CHKSUM, R0 50 51 C0 000CF
- EXTZV #0, #6, R0, R4 ;#0, #6, R0, R4 06 00 EF 000D2
- ; 54 50 000D5
- ADDB3 #32, R4, 6(R7) ;#32, R4, SND_MSG+6 54 20 81 000D7
- ; 06 A7 000DA
- BRB 5$ ;5$ 0C 11 000DC
- 4$: ADDL2 #3, R2 ;#3, TOT_MSG_LEN 4822 52 03 C0 000DE
- MOVAB 32(R0)[R2], R1 ;32(R0)[TOT_MSG_LEN], R1 4823 51 20 A042 9E 000E1
- MOVB R1, 1(R7) ;R1, SND_MSG+1 01 A7 51 90 000E6
- 5$: MOVAB 1(R7), R3 ;SND_MSG+1, POINTER 4830 53 01 A7 9E 000EA
- PUSHL R2 ;TOT_MSG_LEN 4831 52 DD 000EE
- PUSHL R3 ;POINTER 53 DD 000F0
- CALLS #2, G^U.19 ;#2, U.19 00000000V 00 02 FB 000F2
- MOVL R0, R1 ;R0, CHKSUM 51 50 D0 000F9
- MOVAB 1(R7)[R2], R3 ;SND_MSG+1[TOT_MSG_LEN], POINTER 4835 53 01 A742 9E 000FC
- CASEL -1048(R7), #49, #2 ;BLK_CHK_TYPE, #49, #2 4837 31 FBE8 C7 CF 00101
- ; 02 00106
- 6$: .WORD 7$-6$,- ;7$-6$,- 000C 0006 00107
- 8$-6$,- ;8$-6$,- 0022 0010B
- 9$-6$ ;9$-6$
- 7$: ADDB3 #32, R1, (R3) ;#32, CHKSUM, (POINTER) 4841 51 20 81 0010D
- ; 63 00110
- BRB 10$ ;10$ 34 11 00111
- 8$: EXTZV #6, #6, R1, R0 ;#6, #6, CHKSUM, R0 4845 06 06 EF 00113
- ; 50 51 00116
- ADDB3 #32, R0, (R3)+ ;#32, R0, (POINTER)+ 50 20 81 00118
- ; 83 0011B
- EXTZV #0, #6, R1, R0 ;#0, #6, CHKSUM, R0 4846 06 00 EF 0011C
- ; 50 51 0011F
- ADDB3 #32, R0, (R3) ;#32, R0, (POINTER) 50 20 81 00121
- ; 63 00124
- INCL R2 ;TOT_MSG_LEN 4847 52 D6 00125
- BRB 10$ ;10$ 1E 11 00127
- 9$: EXTZV #12, #4, R1, R0 ;#12, #4, CHKSUM, R0 4852 04 0C EF 00129
- ; 50 51 0012C
- ADDB3 #32, R0, (R3)+ ;#32, R0, (POINTER)+ 50 20 81 0012E
- ; 83 00131
- EXTZV #6, #6, R1, R0 ;#6, #6, CHKSUM, R0 4853 06 06 EF 00132
- ; 50 51 00135
- ADDB3 #32, R0, (R3)+ ;#32, R0, (POINTER)+ 50 20 81 00137
- ; 83 0013A
- EXTZV #0, #6, R1, R0 ;#0, #6, CHKSUM, R0 4854 06 00 EF 0013B
- ; 50 51 0013E
- ADDB3 #32, R0, (R3) ;#32, R0, (POINTER) 50 20 81 00140
- ; 63 00143
- ADDL2 #2, R2 ;#2, TOT_MSG_LEN 4855 52 02 C0 00144
- 10$: INCL R3 ;POINTER 4841 53 D6 00147
- MOVB -1068(R7), (R3)+ ;SEND_EOL, (POINTER)+ 4862 83 FBD4 C7 90 00149
- PUSHAB 3(R2) ;3(TOT_MSG_LEN) 4866 03 A2 9F 0014E
- PUSHL R7 ;R7 57 DD 00151
- CALLS #2, G^U.35 ;#2, U.35 00000000V 00 02 FB 00153
- MOVL (R8), R0 ;SMSG_TOTAL_CHARS, R0 4870 50 68 D0 0015A
- MOVAB 3(R2)[R0], (R8) ;3(TOT_MSG_LEN)[R0], - 4871 68 03 A240 9E 0015D
- ;SMSG_TOTAL_CHARS
- CMPL 4(AP), #78 ;TYPE, #78 4875 0000004E 8F 04 AC D1 00162
- BNEQ 11$ ;11$ 0C 12 0016A
- INCL G^SMSG_NAKS ;SMSG_NAKS 4878 00000000G 00 D6 0016C
- MOVZBL #78, -(SP) ;#78, -(SP) 4879 7E 4E 8F 9A 00172
- BRB 12$ ;12$ 0A 11 00176
- 11$: INCL G^SMSG_COUNT ;SMSG_COUNT 4883 00000000G 00 D6 00178
- MOVZBL #80, -(SP) ;#80, -(SP) 4884 7E 50 8F 9A 0017E
- 12$: MOVZBL #83, -(SP) ;#83, -(SP) 7E 53 8F 9A 00182
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 00186
- TSTL G^IBM_CHAR ;IBM_CHAR 4892 00000000G 00 D5 0018D
- BLSS 13$ ;13$ 12 19 00193
- CALLS #0, G^IBM_WAIT ;#0, IBM_WAIT 4894 00000000G 00 00 FB 00195
- BLBS R0, 13$ ;R0, 13$ 08 50 E8 0019C
- MOVL #134316258, R0 ;#134316258, R0 50 080180E2 8F D0 0019F
- RET ; 04 001A6
- 13$: PUSHAB 3(R2) ;3(TOT_MSG_LEN) 4899 03 A2 9F 001A7
- PUSHL R7 ;R7 57 DD 001AA
- CALLS #2, (R9) ;#2, DO_PARITY 69 02 FB 001AC
- PUSHAB 3(R2) ;3(TOT_MSG_LEN) 4900 03 A2 9F 001AF
- PUSHL R7 ;R7 57 DD 001B2
- CALLS #2, (R10) ;#2, SEND 6A 02 FB 001B4
- RET ; 04 001B7
-
- ; Routine Size: 440 bytes, Routine Base: $CODE$ + 1BC0
-
-
- ; 4902 1 %SBTTL 'REC_MESSAGE - Receive a message'
- ; 4903 1 ROUTINE REC_MESSAGE (CHK_ROUTINE) =
- ; 4904 1
- ; 4905 1 !++
- ; 4906 1 ! FUNCTIONAL DESCRIPTION:
- ; 4907 1 !
- ; 4908 1 ! This routine will handle the retry processing for the various
- ; 4909 1 ! messages that can be received.
- ; 4910 1 !
- ; 4911 1 ! CALLING SEQUENCE:
- ; 4912 1 !
- ; 4913 1 ! INPUT PARAMETERS:
- ; 4914 1 !
- ; 4915 1 ! None.
- ; 4916 1 !
- ; 4917 1 ! IMPLICIT INPUTS:
- ; 4918 1 !
- ; 4919 1 ! None.
- ; 4920 1 !
- ; 4921 1 ! OUTPUT PARAMETERS:
- ; 4922 1 !
- ; 4923 1 ! None.
- ; 4924 1 !
- ; 4925 1 ! IMPLICIT OUTPUTS:
- ; 4926 1 !
- ; 4927 1 ! None.
- ; 4928 1 !
- ; 4929 1 ! COMPLETION CODES:
- ; 4930 1 !
- ; 4931 1 ! KER_NORMAL - Normal return
- ; 4932 1 ! KER_RETRIES - Too many retries
- ; 4933 1 ! (What ever REC_PACKET returns).
- ; 4934 1 !
- ; 4935 1 ! SIDE EFFECTS:
- ; 4936 1 !
- ; 4937 1 ! None.
- ; 4938 1 !
- ; 4939 1 !--
- ; 4940 1
- ; 4941 2 BEGIN
- ; 4942 2
- ; 4943 2 LOCAL
- ; 4944 2 STATUS; ! Status returned by various routines
- ; 4945 2
- ; 4946 2 RETURN
- ; 4947 2
- ; 4948 2 WHILE TRUE DO
- ; 4949 3 BEGIN
- ; 4950 3
- ; 4951 3 IF .NUM_RETRIES GTR .PKT_RETRIES
- ; 4952 3 THEN
- ; 4953 4 BEGIN
- ; 4954 4 KRM_ERROR (KER_RETRIES); ! Report the error
- ; 4955 4 RETURN KER_RETRIES;
- ; 4956 3 END;
- ; 4957 3
- ; 4958 3 NUM_RETRIES = .NUM_RETRIES + 1;
- ; 4959 3 STATUS = REC_PACKET ();
- ; 4960 3 ![043] Don't abort on errors which might just be due to noise.
- ; 4961 3
- ; 4962 3 IF NOT .STATUS AND .STATUS NEQ KER_CHKSUMERR AND .STATUS NEQ KER_TIMEOUT AND .STATUS NEQ
- ; 4963 3 KER_ZEROLENMSG
- ; 4964 3 THEN
- ; 4965 3 RETURN .STATUS;
- ; 4966 3
- ; 4967 3 IF NOT .STATUS
- ; 4968 3 THEN
- ; 4969 3 SEND_PACKET (MSG_NAK, 0, .MSG_NUMBER) ![024]
- ; 4970 3 ELSE
- ; 4971 4 BEGIN
- ; 4972 4 ![021]
- ; 4973 4 ![021] If the packet type is not acceptable by our caller, nak it so the
- ; 4974 4 ![021] other end tries again, and abort the current operation. This is so
- ; 4975 4 ![021] we will return to server mode (if we are running that way) quickly
- ; 4976 4 ![021] when the other Kermit has been aborted and then restarted, and should
- ; 4977 4 ![021] also make restarting quick, since we will not need to wait for the
- ; 4978 4 ![021] other Kermit to time this message out before retransmitting.
- ; 4979 4 ![021]
- ; 4980 4
- ; 4981 4 IF NOT (.CHK_ROUTINE) ()
- ; 4982 4 THEN
- ; 4983 5 BEGIN
- ; 4984 5 SEND_PACKET (MSG_NAK, 0, .REC_SEQ);
- ; 4985 5 RETURN FALSE; ! Just indicate an error
- ; 4986 5 END
- ; 4987 4 ELSE
- ; 4988 4 EXITLOOP KER_NORMAL;
- ; 4989 4
- ; 4990 3 END;
- ; 4991 3
- ; 4992 2 END;
- ; 4993 2
- ; 4994 1 END; ! End of REC_PARSE
-
-
-
-
-
- ;REC_MESSAGE
- U.25: .WORD ^M<R2,R3,R4> ;Save R2,R3,R4 4903 001C 00000
- MOVAB W^U.24, R4 ;U.24, R4 54 FE42 CF 9E 00002
- MOVAB G^U.54, R3 ;U.54, R3 53 00000000' 00 9E 00007
- 1$: CMPL (R3), G^PKT_RETRIES ;NUM_RETRIES, PKT_RETRIES 4951 00000000G 00 63 D1 0000E
- BLEQ 2$ ;2$ 15 15 00015
- PUSHL #134316194 ;#134316194 4954 080180A2 8F DD 00017
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 0001D
- MOVL #134316194, R0 ;#134316194, R0 4955 50 080180A2 8F D0 00024
- RET ; 04 0002B
- 2$: INCL (R3) ;NUM_RETRIES 4958 63 D6 0002C
- CALLS #0, G^U.26 ;#0, U.26 4959 00000000V 00 00 FB 0002E
- MOVL R0, R2 ;R0, STATUS 52 50 D0 00035
- BLBS R2, 4$ ;STATUS, 4$ 4962 30 52 E8 00038
- CMPL R2, #134316178 ;STATUS, #134316178 08018092 8F 52 D1 0003B
- BEQL 3$ ;3$ 16 13 00042
- CMPL R2, #134316248 ;STATUS, #134316248 080180D8 8F 52 D1 00044
- BEQL 3$ ;3$ 0D 13 0004B
- CMPL R2, #134316234 ;STATUS, #134316234 4963 080180CA 8F 52 D1 0004D
- BEQL 3$ ;3$ 04 13 00054
- MOVL R2, R0 ;STATUS, R0 4965 50 52 D0 00056
- RET ; 04 00059
- 3$: BLBS R2, 4$ ;STATUS, 4$ 4967 0E 52 E8 0005A
- PUSHL 4(R3) ;MSG_NUMBER 4969 04 A3 DD 0005D
- CLRL -(SP) ;-(SP) 7E D4 00060
- MOVZBL #78, -(SP) ;#78, -(SP) 7E 4E 8F 9A 00062
- CALLS #3, (R4) ;#3, SEND_PACKET 64 03 FB 00066
- BRB 1$ ;1$ A3 11 00069
- 4$: CALLS #0, @4(AP) ;#0, @CHK_ROUTINE 4981 04 BC 00 FB 0006B
- BLBS R0, 5$ ;R0, 5$ 0E 50 E8 0006F
- PUSHL 8(R3) ;REC_SEQ 4984 08 A3 DD 00072
- CLRL -(SP) ;-(SP) 7E D4 00075
- MOVZBL #78, -(SP) ;#78, -(SP) 7E 4E 8F 9A 00077
- CALLS #3, (R4) ;#3, SEND_PACKET 64 03 FB 0007B
- BRB 6$ ;6$ 4985 08 11 0007E
- 5$: MOVL #134316043, R0 ;#134316043, R0 4988 50 0801800B 8F D0 00080
- RET ; 04 00087
- 6$: CLRL R0 ;R0 4946 50 D4 00088
- RET ; 04 0008A
-
- ; Routine Size: 139 bytes, Routine Base: $CODE$ + 1D78
-
-
- ; 4995 1 %SBTTL 'REC_PACKET'
- ; 4996 1 ROUTINE REC_PACKET =
- ; 4997 1
- ; 4998 1 !++
- ; 4999 1 ! FUNCTIONAL DESCRIPTION:
- ; 5000 1 !
- ; 5001 1 ! This routine will do the oppoiste of SEND_PACKET. It will wait
- ; 5002 1 ! for the message to be read from the remote and then it will
- ; 5003 1 ! check the message for validity.
- ; 5004 1 !
- ; 5005 1 ! CALLING SEQUENCE:
- ; 5006 1 !
- ; 5007 1 ! Flag = REC_PACKET();
- ; 5008 1 !
- ; 5009 1 ! INPUT PARAMETERS:
- ; 5010 1 !
- ; 5011 1 ! None.
- ; 5012 1 !
- ; 5013 1 ! IMPLICIT INPUTS:
- ; 5014 1 !
- ; 5015 1 ! None.
- ; 5016 1 !
- ; 5017 1 ! OUTPUT PARAMETERS:
- ; 5018 1 !
- ; 5019 1 ! None.
- ; 5020 1 !
- ; 5021 1 ! IMPLICIT OUTPUTS:
- ; 5022 1 !
- ; 5023 1 ! REC_MSG - Contains the message received.
- ; 5024 1 !
- ; 5025 1 ! COMPLETION CODES:
- ; 5026 1 !
- ; 5027 1 ! True - Packet receive ok.
- ; 5028 1 ! False - Problem occured during the receiving of the packet.
- ; 5029 1 !
- ; 5030 1 ! SIDE EFFECTS:
- ; 5031 1 !
- ; 5032 1 ! None.
- ; 5033 1 !
- ; 5034 1 !--
- ; 5035 1
- ; 5036 2 BEGIN
- ; 5037 2
- ; 5038 2 BIND
- ; 5039 2 ATTEMPT_TEXT = UPLIT (%ASCIZ'Attempting to receive');
- ; 5040 2
- ; 5041 2 LOCAL
- ; 5042 2 STATUS, ! Status returned by various routines
- ; 5043 2 MSG_LENGTH,
- ; 5044 2 ERR_POINTER, ! Pointer to the error buffer
- ; 5045 2 POINTER,
- ; 5046 2 CHKSUM; ! Checksum of the message
- ; 5047 2
- ; 5048 2 !
- ; 5049 2 ! Attempt to read the message from the remote.
- ; 5050 2 !
- ; 5051 2 ! DO
- ; 5052 2 ! BEGIN
- ; 5053 2
- ; 5054 2 IF .DEBUG_FLAG
- ; 5055 2 THEN
- ; 5056 3 BEGIN
- ; 5057 3
- ; 5058 3 LOCAL
- ; 5059 3 OLD_RTN;
- ; 5060 3
- ; 5061 3 OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
- ; 5062 3 TT_TEXT (ATTEMPT_TEXT);
- ; 5063 3 TT_CRLF ();
- ; 5064 3 TT_SET_OUTPUT (.OLD_RTN);
- ; 5065 2 END;
- ; 5066 2
- ; 5067 2 !
- ; 5068 2 ! If status type out requested, do it once
- ; 5069 2 !
- ; 5070 2
- ; 5071 2 IF .TYP_STS_FLAG
- ; 5072 2 THEN
- ; 5073 3 BEGIN
- ; 5074 3 STS_OUTPUT ();
- ; 5075 3 TYP_STS_FLAG = FALSE;
- ; 5076 2 END;
- ; 5077 2
- ; 5078 2 !
- ; 5079 2 ! Receive the message from the remote Kermit
- ; 5080 2 !
- ; 5081 2 STATUS = RECEIVE (REC_MSG, MSG_LENGTH);
- ; 5082 2 !
- ; 5083 2 ! Check for timeouts
- ; 5084 2 !
- ; 5085 2
- ; 5086 2 IF .STATUS EQL KER_TIMEOUT THEN XFR_STATUS (%C'R', %C'T');
- ; 5087 2
- ; 5088 2 !
- ; 5089 2 ! If it failed return the status to the upper level
- ; 5090 2 !
- ; 5091 2
- ; 5092 2 IF NOT .STATUS
- ; 5093 2 THEN
- ; 5094 3 BEGIN
- ; 5095 3
- ; 5096 3 IF .STATUS NEQ KER_ABORTED AND .STATUS NEQ KER_TIMEOUT THEN KRM_ERROR (.STATUS);
- ; 5097 3
- ; 5098 3 ! Report error
- ; 5099 3 RETURN .STATUS;
- ; 5100 2 END;
- ; 5101 2
- ; 5102 2 !
- ; 5103 2 ! Determine if we got a good message
- ; 5104 2 !
- ; 5105 2
- ; 5106 2 IF .MSG_LENGTH LSS PKT_TOT_OVR_HEAD - 1
- ; 5107 2 THEN
- ; 5108 3 BEGIN
- ; 5109 3 RETURN KER_ZEROLENMSG;
- ; 5110 2 END;
- ; 5111 2
- ; 5112 2 IF UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNT, CHR_SIZE))) EQL 0 ! [108]
- ; 5113 2 THEN ! [108]
- ; 5114 3 BEGIN ! [108]
- ; 5115 3 IF .MSG_LENGTH LSS PKT_TOT_OVR_HEAD - 1 + 3 ! [108]
- ; 5116 3 THEN ! [108]
- ; 5117 4 BEGIN ! [108]
- ; 5118 4 RETURN KER_ZEROLENMSG; ! [108]
- ; 5119 3 END; ! [108]
- ; 5120 2 END; ! [108]
- ; 5121 2 !
- ; 5122 2 ! Update the stats on the total number of characters received.
- ; 5123 2 !
- ; 5124 2 RMSG_TOTAL_CHARS = .RMSG_TOTAL_CHARS + .MSG_LENGTH;
- ; 5125 2 !
- ; 5126 2 ! Initialize the checksum and others
- ; 5127 2 !
- ; 5128 2 REC_TYPE = CH$RCHAR (CH$PTR (REC_MSG, PKT_TYPE, CHR_SIZE));
- ; 5129 2 !
- ; 5130 2 ! Now break the message apart byte by byte.
- ; 5131 2 !
- ; 5132 2 RECV_PKT_MSG = PKT_MSG; ! [108]
- ; 5133 2 REC_LENGTH = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNT, CHR_SIZE)));
- ; 5134 2 IF .REC_LENGTH EQL 0 ! [108]
- ; 5135 2 THEN ! [108]
- ; 5136 3 BEGIN ! [108]
- ; 5137 3 REC_LENGTH = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNTX1, CHR_SIZE))) * 95 +
- ; 5138 3 UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNTX2, CHR_SIZE))) +
- ; 5139 3 PKT_HCHECK - 1; ! [108]
- ; 5140 3 RECV_PKT_MSG = PKT_MSGX; ! [108]
- ; 5141 2 END; ! [108]
- ; 5142 2
- ; 5143 2 REC_SEQ = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_SEQ, CHR_SIZE)));
- ; 5144 2 !
- ; 5145 2 ! Typed the packet if we are debugging
- ; 5146 2 !
- ; 5147 2 DBG_RECEIVE (REC_MSG);
- ; 5148 2 !
- ; 5149 2 ! Now compute the final checksum and make sure that it is identical
- ; 5150 2 ! to what we received from the remote KERMIT
- ; 5151 2 !
- ; 5152 2 POINTER = CH$PTR (REC_MSG, PKT_MARK + 1, CHR_SIZE);
- ; 5153 2 REC_LENGTH = .REC_LENGTH - (.BLK_CHK_TYPE - CHK_1CHAR); ! [108]
- ; 5154 2 CHKSUM = CALC_BLOCK_CHECK (.POINTER, .REC_LENGTH); ! [108]
- ; 5155 2 POINTER = CH$PTR (REC_MSG, .REC_LENGTH + 1, CHR_SIZE); ! [108]
- ; 5156 2 REC_LENGTH = .REC_LENGTH - .RECV_PKT_MSG + 1; ! [108]
- ; 5157 2 STATUS = KER_NORMAL; ! Assume good checksum
- ; 5158 2
- ; 5159 2 CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
- ; 5160 2 SET
- ; 5161 2
- ; 5162 2 [CHK_1CHAR] :
- ; 5163 2
- ; 5164 2 IF .CHKSUM NEQ UNCHAR (CH$RCHAR_A (POINTER)) THEN STATUS = KER_CHKSUMERR;
- ; 5165 2
- ; 5166 2 [CHK_2CHAR] :
- ; 5167 2
- ; P 5168 3 IF (.CHKSUM<6, 6> NEQ UNCHAR (CH$RCHAR_A (POINTER))) OR (.CHKSUM<0, 6> NEQ UNCHAR (
- ; 5169 3 CH$RCHAR_A (POINTER)))
- ; 5170 2 THEN
- ; 5171 2 STATUS = KER_CHKSUMERR;
- ; 5172 2
- ; 5173 2 [CHK_CRC] :
- ; 5174 2
- ; P 5175 3 IF (.CHKSUM<12, 4> NEQ UNCHAR (CH$RCHAR_A (POINTER))) OR (.CHKSUM<6, 6> NEQ UNCHAR (
- ; 5176 3 CH$RCHAR_A (POINTER))) OR (.CHKSUM<0, 6> NEQ UNCHAR (CH$RCHAR_A (POINTER)))
- ; 5177 2 THEN
- ; 5178 2 STATUS = KER_CHKSUMERR;
- ; 5179 2
- ; 5180 2 TES;
- ; 5181 2
- ; 5182 2 !
- ; 5183 2 ! If we have a bad checksum, check for the special cases when we might be out
- ; 5184 2 ! of sync with the sender. This can occur if the sender is retransmitting
- ; 5185 2 ! a send-init (because our ACK got lost), and we have agreed on multi-char
- ; 5186 2 ! checksums, or because the sender is a server who has aborted back to being
- ; 5187 2 ! idle without telling us.
- ; 5188 2 ! Note that in either case, we return back to using single character checksums
- ; 5189 2 !
- ; 5190 2
- ; 5191 2 IF .STATUS EQL KER_CHKSUMERR
- ; 5192 2 THEN
- ; 5193 3 BEGIN
- ; 5194 3
- ; 5195 5 IF (.BLK_CHK_TYPE NEQ CHK_1CHAR AND .REC_SEQ EQL 0) AND (.REC_LENGTH LSS 1 - (.BLK_CHK_TYPE
- ; 5196 4 - CHK_1CHAR) AND .REC_TYPE EQL MSG_NAK) OR (.REC_TYPE EQL MSG_SND_INIT)
- ; 5197 3 THEN
- ; 5198 4 BEGIN
- ; 5199 4
- ; 5200 4 LOCAL
- ; 5201 4 SAVE_BLK_CHK_TYPE;
- ; 5202 4
- ; 5203 4 SAVE_BLK_CHK_TYPE = .BLK_CHK_TYPE; ! Remember what we are using
- ; 5204 4 BLK_CHK_TYPE = CHK_1CHAR;
- ; 5205 4 POINTER = CH$PTR (REC_MSG, PKT_MARK + 1, CHR_SIZE);
- ; 5206 4 CHKSUM = CALC_BLOCK_CHECK (.POINTER, .REC_LENGTH + .RECV_PKT_MSG - 1); ! [108]
- ; 5207 4 POINTER = CH$PTR (REC_MSG, .REC_LENGTH + PKT_OVR_HEAD + 1, CHR_SIZE);
- ; 5208 4
- ; 5209 5 IF .CHKSUM NEQ UNCHAR (CH$RCHAR_A (POINTER))
- ; 5210 4 THEN
- ; 5211 5 BEGIN
- ; 5212 5 BLK_CHK_TYPE = .SAVE_BLK_CHK_TYPE;
- ; 5213 5 RETURN KER_CHKSUMERR;
- ; 5214 4 END;
- ; 5215 4
- ; 5216 4 END
- ; 5217 3 ELSE
- ; 5218 3 RETURN KER_CHKSUMERR;
- ; 5219 3
- ; 5220 2 END;
- ; 5221 2
- ; 5222 2 !
- ; 5223 2 ! Update the stats
- ; 5224 2 !
- ; 5225 2 ! RMSG_DATA_CHARS = .RMSG_DATA_CHARS + .REC_LENGTH;
- ; 5226 2
- ; 5227 2 IF .REC_TYPE EQL MSG_NAK
- ; 5228 2 THEN
- ; 5229 3 BEGIN
- ; 5230 3 RMSG_NAKS = .RMSG_NAKS + 1;
- ; 5231 3 XFR_STATUS (%C'R', %C'N');
- ; 5232 3 END
- ; 5233 2 ELSE
- ; 5234 3 BEGIN
- ; 5235 3 RMSG_COUNT = .RMSG_COUNT + 1;
- ; 5236 3 XFR_STATUS (%C'R', %C'P');
- ; 5237 2 END;
- ; 5238 2
- ; 5239 2 !
- ; 5240 2 ! Now check to see if we have an E type (Error) packet.
- ; 5241 2 !
- ; 5242 2
- ; 5243 2 IF .REC_TYPE NEQ MSG_ERROR THEN RETURN KER_NORMAL;
- ; 5244 2
- ; 5245 2 !
- ; 5246 2 ! Here to process an error packet. Call the user routine to output the
- ; 5247 2 ! error message to the terminal.
- ; 5248 2 !
- ; 5249 2 !
- ; 5250 2 ![026] Use decoding routine to fetch the error text
- ; 5251 2 !
- ; 5252 2 CH$FILL (CHR_NUL, MAX_MSG + 1, CH$PTR (LAST_ERROR));
- ; 5253 2 SET_STRING (CH$PTR (LAST_ERROR), MAX_MSG, TRUE);
- ; 5254 2 BFR_EMPTY ();
- ; 5255 2 SET_STRING (0, 0, FALSE);
- ; 5256 2 ![026] ERR_POINTER = CH$PTR (LAST_ERROR);
- ; 5257 2 ![026] POINTER = CH$PTR (REC_MSG, PKT_MSG, CHR_SIZE);
- ; 5258 2 ![026]
- ; 5259 2 ![026] INCR I FROM 1 TO .REC_LENGTH DO
- ; 5260 2 ![026] CH$WCHAR_A (CH$RCHAR_A (POINTER), ERR_POINTER);
- ; 5261 2 ![026]
- ; 5262 2 ![026] CH$WCHAR (CHR_NUL, ERR_POINTER);
- ; 5263 2 TT_TEXT (LAST_ERROR);
- ; 5264 2 TT_CRLF ();
- ; 5265 2 RETURN KER_ERRMSG;
- ; 5266 1 END; ! End of REC_PACKET
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAN: .ASCII \Attempting to receive\<0><0><0> ; 69 74 70 6D 65 74 74 41 000A0
- ; 65 72 20 6F 74 20 67 6E 000A8
- ; 00 00 00 65 76 69 65 63 000B0
-
- U.82= P.AAN
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;REC_PACKET
- U.26: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,- 4996 0FFC 00000
- R11> ;R11
- MOVAB G^TYP_STS_FLAG, R11 ;TYP_STS_FLAG, R11 5B 00000000G 00 9E 00002
- MOVAB G^TT_CRLF, R10 ;TT_CRLF, R10 5A 00000000G 00 9E 00009
- MOVAB G^TT_TEXT, R9 ;TT_TEXT, R9 59 00000000G 00 9E 00010
- MOVAB G^TT_SET_OUTPUT, R8 ;TT_SET_OUTPUT, R8 58 00000000G 00 9E 00017
- MOVAB G^LAST_ERROR, R7 ;LAST_ERROR, R7 57 00000000G 00 9E 0001E
- MOVAB G^U.57, R6 ;U.57, R6 56 00000000' 00 9E 00025
- SUBL2 #4, SP ;#4, SP 5E 04 C2 0002C
- BLBC G^DEBUG_FLAG, 1$ ;DEBUG_FLAG, 1$ 5054 1D 00000000G 00 E9 0002F
- PUSHAB G^DBG_DUMP ;DBG_DUMP 5061 00000000G 00 9F 00036
- CALLS #1, (R8) ;#1, TT_SET_OUTPUT 68 01 FB 0003C
- MOVL R0, R2 ;R0, OLD_RTN 52 50 D0 0003F
- PUSHAB G^U.82 ;U.82 5062 00000000' 00 9F 00042
- CALLS #1, (R9) ;#1, TT_TEXT 69 01 FB 00048
- CALLS #0, (R10) ;#0, TT_CRLF 5063 6A 00 FB 0004B
- PUSHL R2 ;OLD_RTN 5064 52 DD 0004E
- CALLS #1, (R8) ;#1, TT_SET_OUTPUT 68 01 FB 00050
- 1$: BLBC (R11), 2$ ;TYP_STS_FLAG, 2$ 5071 09 6B E9 00053
- CALLS #0, G^U.33 ;#0, U.33 5074 00000000V 00 00 FB 00056
- CLRL (R11) ;TYP_STS_FLAG 5075 6B D4 0005D
- 2$: PUSHL SP ;SP 5081 5E DD 0005F
- PUSHAB 8(R6) ;REC_MSG 08 A6 9F 00061
- CALLS #2, G^RECEIVE ;#2, RECEIVE 00000000G 00 02 FB 00064
- MOVL R0, R5 ;R0, STATUS 55 50 D0 0006B
- CMPL R5, #134316248 ;STATUS, #134316248 5086 080180D8 8F 55 D1 0006E
- BNEQ 3$ ;3$ 0F 12 00075
- MOVZBL #84, -(SP) ;#84, -(SP) 7E 54 8F 9A 00077
- MOVZBL #82, -(SP) ;#82, -(SP) 7E 52 8F 9A 0007B
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 0007F
- 3$: BLBS R5, 5$ ;STATUS, 5$ 5092 1F 55 E8 00086
- CMPL R5, #134316258 ;STATUS, #134316258 5096 080180E2 8F 55 D1 00089
- BEQL 4$ ;4$ 12 13 00090
- CMPL R5, #134316248 ;STATUS, #134316248 080180D8 8F 55 D1 00092
- BEQL 4$ ;4$ 09 13 00099
- PUSHL R5 ;STATUS 55 DD 0009B
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 0009D
- 4$: MOVL R5, R0 ;STATUS, R0 5099 50 55 D0 000A4
- RET ; 04 000A7
- 5$: CMPL (SP), #5 ;MSG_LENGTH, #5 5106 05 6E D1 000A8
- BLSS 6$ ;6$ 0E 19 000AB
- MOVZBL 9(R6), R0 ;REC_MSG+1, R0 5112 50 09 A6 9A 000AD
- CMPB R0, #32 ;R0, #32 20 50 91 000B1
- BNEQ 7$ ;7$ 0D 12 000B4
- CMPL (SP), #8 ;MSG_LENGTH, #8 5115 08 6E D1 000B6
- BGEQ 7$ ;7$ 08 18 000B9
- 6$: MOVL #134316234, R0 ;#134316234, R0 5118 50 080180CA 8F D0 000BB
- RET ; 04 000C2
- 7$: ADDL2 (SP), G^RMSG_TOTAL_CHARS ;MSG_LENGTH, RMSG_TOTAL_CHARS 5124 00000000G 00 6E C0 000C3
- MOVZBL 11(R6), 4(R6) ;REC_MSG+3, REC_TYPE 5128 04 A6 0B A6 9A 000CA
- MOVL #4, -72(R6) ;#4, RECV_PKT_MSG 5132 B8 A6 04 D0 000CF
- MOVAB -32(R0), (R6) ;-32(R0), REC_LENGTH 5133 66 E0 A0 9E 000D3
- BNEQ 8$ ;8$ 5134 19 12 000D7
- MOVZBL 12(R6), R0 ;REC_MSG+4, R0 5137 50 0C A6 9A 000D9
- MULL2 #95, R0 ;#95, R0 50 0000005F 8F C4 000DD
- MOVZBL 13(R6), R1 ;REC_MSG+5, R1 5138 51 0D A6 9A 000E4
- MOVAB -3067(R1)[R0], (R6) ;-3067(R1)[R0], REC_LENGTH 5139 66 F405 C140 9E 000E8
- MOVL #7, -72(R6) ;#7, RECV_PKT_MSG 5140 B8 A6 07 D0 000EE
- 8$: MOVZBL 10(R6), -4(R6) ;REC_MSG+2, REC_SEQ 5143 FC A6 0A A6 9A 000F2
- SUBL2 #32, -4(R6) ;#32, REC_SEQ FC A6 20 C2 000F7
- PUSHAB 8(R6) ;REC_MSG 5147 08 A6 9F 000FB
- CALLS #1, G^U.36 ;#1, U.36 00000000V 00 01 FB 000FE
- MOVAB 9(R6), R2 ;REC_MSG+1, POINTER 5152 52 09 A6 9E 00105
- SUBL3 -36(R6), (R6), R0 ;BLK_CHK_TYPE, REC_LENGTH, R0 5153 66 DC A6 C3 00109
- ; 50 0010D
- MOVAB 49(R0), (R6) ;49(R0), REC_LENGTH 66 31 A0 9E 0010E
- PUSHL (R6) ;REC_LENGTH 5154 66 DD 00112
- PUSHL R2 ;POINTER 52 DD 00114
- CALLS #2, G^U.19 ;#2, U.19 00000000V 00 02 FB 00116
- MOVL (R6), R1 ;REC_LENGTH, R1 5155 51 66 D0 0011D
- MOVAB 9(R6)[R1], R2 ;REC_MSG+1[R1], POINTER 52 09 A641 9E 00120
- MOVL -72(R6), R3 ;RECV_PKT_MSG, R3 5156 53 B8 A6 D0 00125
- SUBL2 R3, R1 ;R3, R1 51 53 C2 00129
- MOVAB 1(R1), (R6) ;1(R1), REC_LENGTH 66 01 A1 9E 0012C
- MOVL #134316043, R5 ;#134316043, STATUS 5157 55 0801800B 8F D0 00130
- MOVL -36(R6), R4 ;BLK_CHK_TYPE, R4 5159 54 DC A6 D0 00137
- CASEL R4, #49, #2 ;R4, #49, #2 31 54 CF 0013B
- ; 02 0013E
- 9$: .WORD 10$-9$,- ;10$-9$,- 001E 0006 0013F
- 12$-9$,- ;12$-9$,- 0011 00143
- 11$-9$ ;11$-9$
- 10$: MOVZBL (R2)+, R1 ;(POINTER)+, R1 5164 51 82 9A 00145
- SUBL2 #32, R1 ;#32, R1 51 20 C2 00148
- CMPL R0, R1 ;CHKSUM, R1 51 50 D1 0014B
- BRB 13$ ;13$ 25 11 0014E
- 11$: MOVZBL (R2)+, R1 ;(POINTER)+, R1 5175 51 82 9A 00150
- SUBL2 #32, R1 ;#32, R1 51 20 C2 00153
- CMPZV #12, #4, R0, R1 ;#12, #4, CHKSUM, R1 04 0C ED 00156
- ; 51 50 00159
- BNEQ 14$ ;14$ 1A 12 0015B
- 12$: MOVZBL (R2)+, R1 ;(POINTER)+, R1 5176 51 82 9A 0015D
- SUBL2 #32, R1 ;#32, R1 51 20 C2 00160
- CMPZV #6, #6, R0, R1 ;#6, #6, CHKSUM, R1 06 06 ED 00163
- ; 51 50 00166
- BNEQ 14$ ;14$ 0D 12 00168
- MOVZBL (R2)+, R1 ;(POINTER)+, R1 51 82 9A 0016A
- SUBL2 #32, R1 ;#32, R1 51 20 C2 0016D
- CMPZV #0, #6, R0, R1 ;#0, #6, CHKSUM, R1 06 00 ED 00170
- ; 51 50 00173
- 13$: BEQL 15$ ;15$ 07 13 00175
- 14$: MOVL #134316178, R5 ;#134316178, STATUS 5178 55 08018092 8F D0 00177
- 15$: CMPL R5, #134316178 ;STATUS, #134316178 5191 08018092 8F 55 D1 0017E
- BNEQ 19$ ;19$ 64 12 00185
- CMPL R4, #49 ;R4, #49 5195 31 54 D1 00187
- BEQL 16$ ;16$ 1B 13 0018A
- TSTL -4(R6) ;REC_SEQ FC A6 D5 0018C
- BNEQ 16$ ;16$ 16 12 0018F
- MOVAB -50(R4), R1 ;-50(R4), R1 5196 51 CE A4 9E 00191
- MNEGL R1, R1 ;R1, R1 51 51 CE 00195
- CMPL (R6), R1 ;REC_LENGTH, R1 51 66 D1 00198
- BGEQ 16$ ;16$ 0A 18 0019B
- CMPL 4(R6), #78 ;REC_TYPE, #78 0000004E 8F 04 A6 D1 0019D
- BEQL 17$ ;17$ 0A 13 001A5
- 16$: CMPL 4(R6), #83 ;REC_TYPE, #83 00000053 8F 04 A6 D1 001A7
- BNEQ 18$ ;18$ 32 12 001AF
- 17$: MOVL #49, -36(R6) ;#49, BLK_CHK_TYPE 5204 DC A6 31 D0 001B1
- MOVAB 9(R6), R2 ;REC_MSG+1, POINTER 5205 52 09 A6 9E 001B5
- MOVL (R6), R1 ;REC_LENGTH, R1 5206 51 66 D0 001B9
- PUSHAB -1(R3)[R1] ;-1(R3)[R1] FF A341 9F 001BC
- PUSHL R2 ;POINTER 52 DD 001C0
- CALLS #2, G^U.19 ;#2, U.19 00000000V 00 02 FB 001C2
- MOVAB 8(R6), R1 ;REC_MSG, R1 5207 51 08 A6 9E 001C9
- ADDL2 (R6), R1 ;REC_LENGTH, R1 51 66 C0 001CD
- MOVAB 4(R1), R2 ;4(R1), POINTER 52 04 A1 9E 001D0
- MOVZBL (R2)+, R1 ;(POINTER)+, R1 5209 51 82 9A 001D4
- SUBL2 #32, R1 ;#32, R1 51 20 C2 001D7
- CMPL R0, R1 ;CHKSUM, R1 51 50 D1 001DA
- BEQL 19$ ;19$ 0C 13 001DD
- MOVL R4, -36(R6) ;SAVE_BLK_CHK_TYPE, BLK_CHK_TYPE 5212 DC A6 54 D0 001DF
- 18$: MOVL #134316178, R0 ;#134316178, R0 5218 50 08018092 8F D0 001E3
- RET ; 04 001EA
- 19$: CMPL 4(R6), #78 ;REC_TYPE, #78 5227 0000004E 8F 04 A6 D1 001EB
- BNEQ 20$ ;20$ 0C 12 001F3
- INCL G^RMSG_NAKS ;RMSG_NAKS 5230 00000000G 00 D6 001F5
- MOVZBL #78, -(SP) ;#78, -(SP) 5231 7E 4E 8F 9A 001FB
- BRB 21$ ;21$ 0A 11 001FF
- 20$: INCL G^RMSG_COUNT ;RMSG_COUNT 5235 00000000G 00 D6 00201
- MOVZBL #80, -(SP) ;#80, -(SP) 5236 7E 50 8F 9A 00207
- 21$: MOVZBL #82, -(SP) ;#82, -(SP) 7E 52 8F 9A 0020B
- CALLS #2, G^XFR_STATUS ;#2, XFR_STATUS 00000000G 00 02 FB 0020F
- CMPL 4(R6), #69 ;REC_TYPE, #69 5243 00000045 8F 04 A6 D1 00216
- BEQL 22$ ;22$ 08 13 0021E
- MOVL #134316043, R0 ;#134316043, R0 50 0801800B 8F D0 00220
- RET ; 04 00227
- 22$: MOVC5 #0, (SP), #0, #1003, (R7) ;#0, (SP), #0, #1003, LAST_ERROR 5252 6E 00 2C 00228
- ; 03EB 8F 00 0022B
- ; 67 0022F
- PUSHL #1 ;#1 5253 01 DD 00230
- MOVZWL #1002, -(SP) ;#1002, -(SP) 7E 03EA 8F 3C 00232
- PUSHL R7 ;R7 57 DD 00237
- CALLS #3, G^U.30 ;#3, U.30 00000000V 00 03 FB 00239
- CALLS #0, G^U.28 ;#0, U.28 5254 00000000V 00 00 FB 00240
- CLRQ -(SP) ;-(SP) 5255 7E 7C 00247
- CLRL -(SP) ;-(SP) 7E D4 00249
- CALLS #3, G^U.30 ;#3, U.30 00000000V 00 03 FB 0024B
- PUSHL R7 ;R7 5263 57 DD 00252
- CALLS #1, (R9) ;#1, TT_TEXT 69 01 FB 00254
- CALLS #0, (R10) ;#0, TT_CRLF 5264 6A 00 FB 00257
- MOVL #134316170, R0 ;#134316170, R0 5265 50 0801808A 8F D0 0025A
- RET ; 04 00261
-
- ; Routine Size: 610 bytes, Routine Base: $CODE$ + 1E03
-
-
- ; 5267 1 %SBTTL 'CALC_BLOCK_CHECK'
- ; 5268 1 ROUTINE CALC_BLOCK_CHECK (POINTER, LENGTH) =
- ; 5269 1
- ; 5270 1 !++
- ; 5271 1 ! FUNCTIONAL DESCRIPTION:
- ; 5272 1 !
- ; 5273 1 ! This routine will calculate the proper value for the block check
- ; 5274 1 ! for a given message. The value it returns is dependant upon the
- ; 5275 1 ! type of block check requested in BLK_CHK_TYPE.
- ; 5276 1 !
- ; 5277 1 ! CALLING SEQUENCE:
- ; 5278 1 !
- ; 5279 1 ! CHKSUM = CALC_BLOCK_CHECK (.POINTER, .LENGTH);
- ; 5280 1 !
- ; 5281 1 ! INPUT PARAMETERS:
- ; 5282 1 !
- ; 5283 1 ! POINTER - A character pointer to the first character to be
- ; 5284 1 ! included in the block check.
- ; 5285 1 !
- ; 5286 1 ! LENGTH - The number of characters to be included.
- ; 5287 1 !
- ; 5288 1 ! IMPLICIT INPUTS:
- ; 5289 1 !
- ; 5290 1 ! BLK_CHK_TYPE - The type of block check to generate.
- ; 5291 1 !
- ; 5292 1 ! OUPTUT PARAMETERS:
- ; 5293 1 !
- ; 5294 1 ! The value is the block check.
- ; 5295 1 !
- ; 5296 1 ! IMPLICIT OUTPUTS:
- ; 5297 1 !
- ; 5298 1 ! None.
- ; 5299 1 !
- ; 5300 1 ! COMPLETION CODES:
- ; 5301 1 !
- ; 5302 1 ! None.
- ; 5303 1 !
- ; 5304 1 ! SIDE EFFECTS:
- ; 5305 1 !
- ; 5306 1 ! None.
- ; 5307 1 !
- ; 5308 1 !--
- ; 5309 1
- ; 5310 2 BEGIN
- ; 5311 2
- ; 5312 2 LOCAL
- ; 5313 2 CHAR_MASK, ! Mask for stripping bits
- ; 5314 2 BLOCK_CHECK; ! To build initial block check value
- ; 5315 2
- ; 5316 2 BLOCK_CHECK = 0; ! Start out at 0
- ; 5317 2 !
- ; 5318 2 ! Set mask for characters so that we calculate the block check correctly
- ; 5319 2 !
- ; 5320 2 CHAR_MASK = (IF .PARITY_TYPE EQL PR_NONE THEN %O'377' ELSE %O'177');
- ; 5321 2
- ; 5322 2 CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
- ; 5323 2 SET
- ; 5324 2
- ; 5325 2 [CHK_1CHAR, CHK_2CHAR] :
- ; 5326 2
- ; 5327 2 INCR I FROM 1 TO .LENGTH DO
- ; 5328 2 BLOCK_CHECK = .BLOCK_CHECK + (CH$RCHAR_A (POINTER) AND .CHAR_MASK);
- ; 5329 2
- ; 5330 2 [CHK_CRC] :
- ; 5331 3 BEGIN
- ; 5332 3 !
- ; 5333 3 ! Ensure that the calculation is done with correct type of characters
- ; 5334 3 !
- ; 5335 3
- ; 5336 3 LOCAL
- ; 5337 3 TMP_PTR; ! Temp pointer for copying chars
- ; 5338 3
- ; 5339 3 TMP_PTR = .POINTER;
- ; 5340 3
- ; 5341 3 IF .PARITY_TYPE NEQ PR_NONE
- ; 5342 3 THEN
- ; 5343 3
- ; 5344 3 INCR I FROM 1 TO .LENGTH DO
- ; 5345 3 CH$WCHAR_A ((CH$RCHAR (.TMP_PTR) AND %O'177'), TMP_PTR);
- ; 5346 3
- ; 5347 3 BLOCK_CHECK = CRCCLC (.POINTER, .LENGTH);
- ; 5348 2 END;
- ; 5349 2 TES;
- ; 5350 2
- ; 5351 2 IF .BLK_CHK_TYPE EQL CHK_1CHAR
- ; 5352 2 THEN
- ; 5353 2 BLOCK_CHECK = (.BLOCK_CHECK + ((.BLOCK_CHECK AND %O'300')/%O'100')) AND %O'77';
- ; 5354 2
- ; 5355 2 RETURN .BLOCK_CHECK; ! Return the correct value
- ; 5356 1 END; ! End of CALC_BLOCK_CHK
-
-
-
-
-
- ;CALC_BLOCK_CHECK
- U.19: .WORD ^M<R2,R3,R4,R5> ;Save R2,R3,R4,R5 5268 003C 00000
- MOVAB G^U.48, R5 ;U.48, R5 55 00000000' 00 9E 00002
- CLRL R3 ;BLOCK_CHECK 5316 53 D4 00009
- MOVL G^PARITY_TYPE, R1 ;PARITY_TYPE, R1 5320 51 00000000G 00 D0 0000B
- BNEQ 1$ ;1$ 06 12 00012
- MOVZBL #255, R2 ;#255, CHAR_MASK 52 FF 8F 9A 00014
- BRB 2$ ;2$ 04 11 00018
- 1$: MOVZBL #127, R2 ;#127, CHAR_MASK 52 7F 8F 9A 0001A
- 2$: CASEL (R5), #49, #2 ;BLK_CHK_TYPE, #49, #2 5322 31 65 CF 0001E
- ; 02 00021
- 3$: .WORD 4$-3$,- ;4$-3$,- 0006 0006 00022
- 4$-3$,- ;4$-3$,- 0021 00026
- 7$-3$ ;7$-3$
- 4$: CLRL R0 ;I 5327 50 D4 00028
- BRB 6$ ;6$ 10 11 0002A
- 5$: MOVZBL @4(AP), R1 ;@POINTER, R1 5328 51 04 BC 9A 0002C
- INCL 4(AP) ;POINTER 04 AC D6 00030
- MCOML R2, R4 ;CHAR_MASK, R4 54 52 D2 00033
- BICL2 R4, R1 ;R4, R1 51 54 CA 00036
- ADDL2 R1, R3 ;R1, BLOCK_CHECK 53 51 C0 00039
- 6$: AOBLEQ 8(AP), R0, 5$ ;LENGTH, I, 5$ 50 08 AC F3 0003C
- ; EB 00040
- BRB 11$ ;11$ 27 11 00041
- 7$: MOVL 4(AP), R2 ;POINTER, TMP_PTR 5339 52 04 AC D0 00043
- TSTL R1 ;R1 5341 51 D5 00047
- BEQL 10$ ;10$ 11 13 00049
- CLRL R0 ;I 5344 50 D4 0004B
- BRB 9$ ;9$ 08 11 0004D
- 8$: EXTZV #0, #7, (R2), R1 ;#0, #7, (TMP_PTR), R1 5345 07 00 EF 0004F
- ; 51 62 00052
- MOVB R1, (R2)+ ;R1, (TMP_PTR)+ 82 51 90 00054
- 9$: AOBLEQ 8(AP), R0, 8$ ;LENGTH, I, 8$ 50 08 AC F3 00057
- ; F3 0005B
- 10$: MOVQ 4(AP), -(SP) ;POINTER, -(SP) 5347 7E 04 AC 7D 0005C
- CALLS #2, G^CRCCLC ;#2, CRCCLC 00000000G 00 02 FB 00060
- MOVL R0, R3 ;R0, BLOCK_CHECK 53 50 D0 00067
- 11$: CMPL (R5), #49 ;BLK_CHK_TYPE, #49 5351 31 65 D1 0006A
- BNEQ 12$ ;12$ 17 12 0006D
- BICL3 #-193, R3, R0 ;#-193, BLOCK_CHECK, R0 5353 53 FFFFFF3F 8F CB 0006F
- ; 50 00076
- DIVL2 #64, R0 ;#64, R0 50 00000040 8F C6 00077
- ADDL2 R3, R0 ;BLOCK_CHECK, R0 50 53 C0 0007E
- EXTZV #0, #6, R0, R3 ;#0, #6, R0, BLOCK_CHECK 06 00 EF 00081
- ; 53 50 00084
- 12$: MOVL R3, R0 ;BLOCK_CHECK, R0 5355 50 53 D0 00086
- RET ; 04 00089
-
- ; Routine Size: 138 bytes, Routine Base: $CODE$ + 2065
-
-
- ; 5357 1 %SBTTL 'NORMALIZE_FILE - Put file name into normal form'
- ; 5358 1 ROUTINE NORMALIZE_FILE (FILE_ADDRESS, FILE_LENGTH, NAME_LENGTH, TYPE_LENGTH) : NOVALUE =
- ; 5359 1
- ; 5360 1 !++
- ; 5361 1 ! FUNCTIONAL DESCRIPTION:
- ; 5362 1 !
- ; 5363 1 ! This routine will ensure that a file specification is in normal
- ; 5364 1 ! form. It does this by replacing all non-alphanumeric characters
- ; 5365 1 ! (except the first period) with "X". It will also ensure that
- ; 5366 1 ! the resulting specification (of form name.type) has only
- ; 5367 1 ! a specified number of characters in the name portion and type portion.
- ; 5368 1 !
- ; 5369 1 ! CALLING SEQUENCE:
- ; 5370 1 !
- ; 5371 1 ! NORMALIZE_FILE (FILE_ADDRESS, FILE_LENGTH, NAME_LENGTH, TYPE_LENGTH);
- ; 5372 1 !
- ; 5373 1 ! INPUT PARAMETERS:
- ; 5374 1 !
- ; 5375 1 ! FILE_ADDRESS - Address of file specification string to be normalized
- ; 5376 1 !
- ; 5377 1 ! FILE_LENGTH - Length of file specification
- ; 5378 1 !
- ; 5379 1 ! NAME_LENGTH - Maximum length desired for "name" portion.
- ; 5380 1 !
- ; 5381 1 ! TYPE_LENGTH - Maximum length desired for "type" portion.
- ; 5382 1 !
- ; 5383 1 ! With both NAME_LENGTH and TYPE_LENGTH, a negative value indicates
- ; 5384 1 ! unlimited lenght.
- ; 5385 1 !
- ; 5386 1 ! IMPLICIT INPUTS:
- ; 5387 1 !
- ; 5388 1 ! None.
- ; 5389 1 !
- ; 5390 1 ! OUPTUT PARAMETERS:
- ; 5391 1 !
- ; 5392 1 ! FILE_LENGTH - The length of the resulting file spec
- ; 5393 1 !
- ; 5394 1 ! NAME_LENGTH - The actual length of the resulting file name
- ; 5395 1 !
- ; 5396 1 ! TYPE_LENGTH - The actual length of the resulting file type
- ; 5397 1 !
- ; 5398 1 ! IMPLICIT OUTPUTS:
- ; 5399 1 !
- ; 5400 1 ! None.
- ; 5401 1 !
- ; 5402 1 ! COMPLETION CODES:
- ; 5403 1 !
- ; 5404 1 ! None.
- ; 5405 1 !
- ; 5406 1 ! SIDE EFFECTS:
- ; 5407 1 !
- ; 5408 1 ! None.
- ; 5409 1 !
- ; 5410 1 !--
- ; 5411 1
- ; 5412 2 BEGIN
- ; 5413 2
- ; 5414 2 LOCAL
- ; 5415 2 CH, ! Character being processed
- ; 5416 2 POINTER, ! Pointer to file spec
- ; 5417 2 WRT_POINTER, ! Pointer to write file spec
- ; 5418 2 WRT_SIZE,
- ; 5419 2 FIRST_PERIOD, ! Flag we have seen a period
- ; 5420 2 IGNORE_BAD, ! Flag we should ignore bad characters
- ; 5421 2 BAD_CHAR, ! Flag this character was bad
- ; 5422 2 FILE_CTR, ! Counter for overall length
- ; 5423 2 NAME_CTR, ! Counter for name characters
- ; 5424 2 TYPE_CTR; ! Counter for type characters
- ; 5425 2
- ; 5426 2 FILE_CTR = 0;
- ; 5427 2 NAME_CTR = 0;
- ; 5428 2 TYPE_CTR = 0;
- ; 5429 2 WRT_SIZE = 0;
- ; 5430 2 FIRST_PERIOD = FALSE; ! No periods yet
- ; 5431 2 POINTER = CH$PTR (.FILE_ADDRESS); ! Set up pointer to file name
- ; 5432 2 WRT_POINTER = .POINTER;
- ; 5433 2
- ; 5434 2 IF .NAME_LENGTH EQL 0 THEN FIRST_PERIOD = TRUE; ! Pretend we did name already
- ; 5435 2
- ; 5436 2 IGNORE_BAD = FALSE;
- ; 5437 2
- ; 5438 2 IF .NAME_LENGTH GTR 0
- ; 5439 2 THEN
- ; 5440 3 BEGIN
- ; 5441 3
- ; 5442 3 DECR I FROM ..FILE_LENGTH TO 0 DO
- ; 5443 3
- ; 5444 3 IF CH$RCHAR_A (POINTER) EQL %C'.'
- ; 5445 3 THEN
- ; 5446 4 BEGIN
- ; 5447 4 IGNORE_BAD = TRUE;
- ; 5448 4 EXITLOOP;
- ; 5449 3 END;
- ; 5450 3
- ; 5451 2 END;
- ; 5452 2
- ; 5453 2 POINTER = .WRT_POINTER;
- ; 5454 2
- ; 5455 2 WHILE .FILE_CTR LSS ..FILE_LENGTH DO
- ; 5456 3 BEGIN
- ; 5457 3 CH = CH$RCHAR_A (POINTER); ! Get a character
- ; 5458 3 FILE_CTR = .FILE_CTR + 1;
- ; 5459 3
- ; 5460 4 IF (.CH LSS %C'0' AND (.CH NEQ %C'.' OR .FIRST_PERIOD)) OR .CH GTR %C'z' OR (.CH GTR %C'9'
- ; 5461 4 AND .CH LSS %C'A') OR (.CH GTR %C'Z' AND .CH LSS %C'a')
- ; 5462 3 THEN
- ; 5463 4 BEGIN
- ; 5464 4 BAD_CHAR = TRUE;
- ; 5465 4 CH = %C'X';
- ; 5466 4 END
- ; 5467 3 ELSE
- ; 5468 4 BEGIN
- ; 5469 4 BAD_CHAR = FALSE;
- ; 5470 4
- ; 5471 4 IF .CH GEQ %C'a' THEN CH = .CH - (%C'a' - %C'A');
- ; 5472 4
- ; 5473 3 END;
- ; 5474 3
- ; 5475 3 IF .CH EQL %C'.'
- ; 5476 3 THEN
- ; 5477 4 BEGIN
- ; 5478 4 FIRST_PERIOD = TRUE;
- ; 5479 4 CH$WCHAR_A (.CH, WRT_POINTER);
- ; 5480 4 WRT_SIZE = .WRT_SIZE + 1;
- ; 5481 4 END
- ; 5482 3 ELSE
- ; 5483 3
- ; 5484 3 IF NOT .BAD_CHAR OR NOT .IGNORE_BAD
- ; 5485 3 THEN
- ; 5486 3
- ; 5487 3 IF NOT .FIRST_PERIOD
- ; 5488 3 THEN
- ; 5489 4 BEGIN
- ; 5490 4
- ; 5491 4 IF .NAME_LENGTH LSS 0 OR .NAME_CTR LSS .NAME_LENGTH
- ; 5492 4 THEN
- ; 5493 5 BEGIN
- ; 5494 5 NAME_CTR = .NAME_CTR + 1;
- ; 5495 5 WRT_SIZE = .WRT_SIZE + 1;
- ; 5496 5 CH$WCHAR_A (.CH, WRT_POINTER);
- ; 5497 4 END;
- ; 5498 4
- ; 5499 4 END
- ; 5500 3 ELSE
- ; 5501 3
- ; 5502 3 IF .TYPE_LENGTH LSS 0 OR .TYPE_CTR LSS .TYPE_LENGTH
- ; 5503 3 THEN
- ; 5504 4 BEGIN
- ; 5505 4 TYPE_CTR = .TYPE_CTR + 1;
- ; 5506 4 WRT_SIZE = .WRT_SIZE + 1;
- ; 5507 4 CH$WCHAR_A (.CH, WRT_POINTER);
- ; 5508 3 END;
- ; 5509 3
- ; 5510 2 END;
- ; 5511 2
- ; 5512 2 .FILE_LENGTH = .WRT_SIZE;
- ; 5513 2 CH$WCHAR_A (CHR_NUL, WRT_POINTER);
- ; 5514 1 END; ! End of NORMALIZE_FILE
-
-
-
-
-
- ;NORMALIZE_FILE
- U.27: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10> ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10 5358 07FC 00000
- CLRQ R8 ;NAME_CTR 5427 58 7C 00002
- CLRL R7 ;TYPE_CTR 5428 57 D4 00004
- CLRQ R4 ;FIRST_PERIOD 5430 54 7C 00006
- MOVL 4(AP), R6 ;FILE_ADDRESS, POINTER 5431 56 04 AC D0 00008
- MOVL R6, R1 ;POINTER, WRT_POINTER 5432 51 56 D0 0000C
- MOVL 12(AP), R3 ;NAME_LENGTH, R3 5434 53 0C AC D0 0000F
- BNEQ 1$ ;1$ 03 12 00013
- MOVL #1, R4 ;#1, FIRST_PERIOD 54 01 D0 00015
- 1$: CLRL R10 ;IGNORE_BAD 5436 5A D4 00018
- TSTL R3 ;R3 5438 53 D5 0001A
- BLEQ 4$ ;4$ 17 15 0001C
- ADDL3 #1, @8(AP), R0 ;#1, @FILE_LENGTH, I 5442 08 BC 01 C1 0001E
- ; 50 00022
- BRB 3$ ;3$ 0D 11 00023
- 2$: MOVZBL (R6)+, R2 ;(POINTER)+, R2 5444 52 86 9A 00025
- CMPB R2, #46 ;R2, #46 2E 52 91 00028
- BNEQ 3$ ;3$ 05 12 0002B
- MOVL #1, R10 ;#1, IGNORE_BAD 5447 5A 01 D0 0002D
- BRB 4$ ;4$ 5448 03 11 00030
- 3$: SOBGEQ R0, 2$ ;I, 2$ 5442 F0 50 F4 00032
- 4$: MOVL R1, R6 ;WRT_POINTER, POINTER 5453 56 51 D0 00035
- 5$: CMPL R9, @8(AP) ;FILE_CTR, @FILE_LENGTH 5455 08 BC 59 D1 00038
- BLSS 6$ ;6$ 03 19 0003C
- BRW 19$ ;19$ 008B 31 0003E
- 6$: MOVZBL (R6)+, R0 ;(POINTER)+, CH 5457 50 86 9A 00041
- INCL R9 ;FILE_CTR 5458 59 D6 00044
- CMPL R0, #48 ;CH, #48 5460 30 50 D1 00046
- BGEQ 7$ ;7$ 08 18 00049
- CMPL R0, #46 ;CH, #46 2E 50 D1 0004B
- BNEQ 9$ ;9$ 2C 12 0004E
- BLBS R4, 9$ ;FIRST_PERIOD, 9$ 29 54 E8 00050
- 7$: CMPL R0, #122 ;CH, #122 0000007A 8F 50 D1 00053
- BGTR 9$ ;9$ 20 14 0005A
- CMPL R0, #57 ;CH, #57 39 50 D1 0005C
- BLEQ 8$ ;8$ 09 15 0005F
- CMPL R0, #65 ;CH, #65 5461 00000041 8F 50 D1 00061
- BLSS 9$ ;9$ 12 19 00068
- 8$: CMPL R0, #90 ;CH, #90 0000005A 8F 50 D1 0006A
- BLEQ 10$ ;10$ 12 15 00071
- CMPL R0, #97 ;CH, #97 00000061 8F 50 D1 00073
- BGEQ 10$ ;10$ 09 18 0007A
- 9$: MOVL #1, R2 ;#1, BAD_CHAR 5464 52 01 D0 0007C
- MOVZBL #88, R0 ;#88, CH 5465 50 58 8F 9A 0007F
- BRB 11$ ;11$ 0E 11 00083
- 10$: CLRL R2 ;BAD_CHAR 5469 52 D4 00085
- CMPL R0, #97 ;CH, #97 5471 00000061 8F 50 D1 00087
- BLSS 11$ ;11$ 03 19 0008E
- SUBL2 #32, R0 ;#32, CH 50 20 C2 00090
- 11$: CMPL R0, #46 ;CH, #46 5475 2E 50 D1 00093
- BNEQ 13$ ;13$ 0A 12 00096
- MOVL #1, R4 ;#1, FIRST_PERIOD 5478 54 01 D0 00098
- MOVB R0, (R1)+ ;CH, (WRT_POINTER)+ 5479 81 50 90 0009B
- INCL R5 ;WRT_SIZE 5480 55 D6 0009E
- 12$: BRB 5$ ;5$ 96 11 000A0
- 13$: BLBC R2, 14$ ;BAD_CHAR, 14$ 5484 03 52 E9 000A2
- BLBS R10, 5$ ;IGNORE_BAD, 5$ 90 5A E8 000A5
- 14$: BLBS R4, 16$ ;FIRST_PERIOD, 16$ 5487 0D 54 E8 000A8
- TSTL R3 ;R3 5491 53 D5 000AB
- BLSS 15$ ;15$ 05 19 000AD
- CMPL R8, R3 ;NAME_CTR, R3 53 58 D1 000AF
- BGEQ 5$ ;5$ 84 18 000B2
- 15$: INCL R8 ;NAME_CTR 5494 58 D6 000B4
- BRB 18$ ;18$ 5495 0D 11 000B6
- 16$: TSTL 16(AP) ;TYPE_LENGTH 5502 10 AC D5 000B8
- BLSS 17$ ;17$ 06 19 000BB
- CMPL R7, 16(AP) ;TYPE_CTR, TYPE_LENGTH 10 AC 57 D1 000BD
- BGEQ 12$ ;12$ DD 18 000C1
- 17$: INCL R7 ;TYPE_CTR 5505 57 D6 000C3
- 18$: INCL R5 ;WRT_SIZE 5506 55 D6 000C5
- MOVB R0, (R1)+ ;CH, (WRT_POINTER)+ 5507 81 50 90 000C7
- BRB 12$ ;12$ D4 11 000CA
- 19$: MOVL R5, @8(AP) ;WRT_SIZE, @FILE_LENGTH 5512 08 BC 55 D0 000CC
- CLRB (R1)+ ;(WRT_POINTER)+ 5513 81 94 000D0
- RET ; 5514 04 000D2
-
- ; Routine Size: 211 bytes, Routine Base: $CODE$ + 20EF
-
-
- ; 5515 1 %SBTTL 'Buffer filling -- Main routine'
- ; 5516 1 ROUTINE BFR_FILL (FIRST_FLAG) =
- ; 5517 1
- ; 5518 1 !++
- ; 5519 1 ! FUNCTIONAL DESCRIPTION:
- ; 5520 1 !
- ; 5521 1 ! This routine will fill the buffer with data from the file. It
- ; 5522 1 ! will do all the quoting that is required.
- ; 5523 1 !
- ; 5524 1 ! CALLING SEQUENCE:
- ; 5525 1 !
- ; 5526 1 ! EOF_FLAG = BFR_FILL(.FIRST_FLAG);
- ; 5527 1 !
- ; 5528 1 ! INPUT PARAMETERS:
- ; 5529 1 !
- ; 5530 1 ! FIRST_FLAG - Flag whether first call for this file
- ; 5531 1 !
- ; 5532 1 ! IMPLICIT INPUTS:
- ; 5533 1 !
- ; 5534 1 ! None.
- ; 5535 1 !
- ; 5536 1 ! OUTPUT PARAMETERS:
- ; 5537 1 !
- ; 5538 1 ! True - Buffer filled may be at end of file.
- ; 5539 1 ! False - At end of file.
- ; 5540 1 !
- ; 5541 1 ! IMPLICIT OUTPUTS:
- ; 5542 1 !
- ; 5543 1 ! Number of characters stored in the buffer.
- ; 5544 1 !
- ; 5545 1 ! COMPLETION CODES:
- ; 5546 1 !
- ; 5547 1 ! None.
- ; 5548 1 !
- ; 5549 1 ! SIDE EFFECTS:
- ; 5550 1 !
- ; 5551 1 ! None.
- ; 5552 1 !
- ; 5553 1 !--
- ; 5554 1
- ; 5555 2 BEGIN
- ; 5556 2
- ; 5557 2 LITERAL
- ; 5558 2 NO_CHAR = -1, ! No character next
- ; 5559 2 EOF_CHAR = -2; ! EOF seen
- ; 5560 2
- ; 5561 2 LOCAL
- ; 5562 2 I, ! Temp loop index
- ; 5563 2 MAX_SIZE, ! Maximum size of data
- ; 5564 2 POINTER; ! Pointer into the message buffer
- ; 5565 2
- ; 5566 2 OWN
- ; 5567 2 NEXT_CHR, ! Saved character
- ; 5568 2 STATUS, ! Status value
- ; 5569 2 REPEAT_COUNT, ! Number of times character repeated
- ; 5570 2 CHAR_8_BIT, ! 8 bit character from file
- ; 5571 2 CHRS : VECTOR [5], ! String needed to represent character
- ; 5572 2 CHR_IDX, ! Index into CHRS
- ; 5573 2 OLD_CHAR_8_BIT, ! Previous 8-bit character
- ; 5574 2 OLD_CHRS : VECTOR [5], ! String for previous character
- ; 5575 2 OLD_CHR_IDX; ! Index for previous character
- ; 5576 2
- ; 5577 2 ROUTINE GET_QUOTED_CHAR =
- ; 5578 2 !
- ; 5579 2 ! This routine gets a character from the file and returns both
- ; 5580 2 ! the character and the string needed to represent the character
- ; 5581 2 ! if it needs quoting.
- ; 5582 2 !
- ; 5583 3 BEGIN
- ; 5584 3
- ; 5585 3 IF .NEXT_CHR GEQ 0
- ; 5586 3 THEN
- ; 5587 4 BEGIN
- ; 5588 4 CHAR_8_BIT = .NEXT_CHR;
- ; 5589 4 NEXT_CHR = NO_CHAR;
- ; 5590 4 STATUS = KER_NORMAL;
- ; 5591 4 END
- ; 5592 3 ELSE
- ; 5593 3
- ; 5594 3 IF .NEXT_CHR EQL NO_CHAR
- ; 5595 3 THEN
- ; 5596 3 STATUS = (.GET_CHR_ROUTINE) (CHAR_8_BIT)
- ; 5597 3 ELSE
- ; 5598 3 STATUS = KER_EOF;
- ; 5599 3
- ; 5600 3 IF .STATUS EQL KER_NORMAL
- ; 5601 3 THEN
- ; 5602 4 BEGIN
- ; 5603 4 !
- ; 5604 4 ! Determine if we should just quote the character
- ; 5605 4 ! Either:
- ; 5606 4 ! Character is a delete (177 octal)
- ; 5607 4 ! or Character is a control character (less than 40 octal)
- ; 5608 4 ! or Character is a quote character
- ; 5609 4 ! or Character is the repeat character and doing repeat compression
- ; 5610 4 ! or Character is an eight bit quote character and doing eight bit
- ; 5611 4 ! quoting.
- ; 5612 4 !
- ; 5613 4
- ; 5614 5 IF ((.CHAR_8_BIT AND %O'177') LSS %C' ') OR ((.CHAR_8_BIT AND %O'177') EQL CHR_DEL) OR (
- ; 5615 7 (.CHAR_8_BIT AND %O'177') EQL .RCV_QUOTE_CHR) OR (.FLAG_REPEAT AND ((.CHAR_8_BIT AND
- ; 5616 6 %O'177') EQL .REPT_CHR)) OR (.FLAG_8QUOTE AND ((.CHAR_8_BIT AND %O'177') EQL
- ; 5617 5 .SEND_8QUOTE_CHR))
- ; 5618 4 THEN
- ; 5619 5 BEGIN
- ; 5620 5 !
- ; 5621 5 ! If the character is a control character or delete we must do a CTL(Character)
- ; 5622 5 ! so it is something that we can be sure we can send.
- ; 5623 5 !
- ; 5624 5
- ; 5625 6 IF ((.CHAR_8_BIT AND %O'177') LSS %C' ') OR ((.CHAR_8_BIT AND %O'177') EQL CHR_DEL)
- ; 5626 5 THEN
- ; 5627 6 CHRS [0] = CTL (.CHAR_8_BIT)
- ; 5628 5 ELSE
- ; 5629 5 CHRS [0] = .CHAR_8_BIT;
- ; 5630 5
- ; 5631 5 CHR_IDX = 1;
- ; 5632 5 CHRS [1] = .RCV_QUOTE_CHR; ![035] Use character we said we would send
- ; 5633 5 END
- ; 5634 4 ELSE
- ; 5635 5 BEGIN
- ; 5636 5 CHR_IDX = 0;
- ; 5637 5 CHRS [0] = .CHAR_8_BIT;
- ; 5638 4 END;
- ; 5639 4
- ; 5640 4 END
- ; 5641 3 ELSE
- ; 5642 3
- ; 5643 3 IF .STATUS NEQ KER_EOF THEN KRM_ERROR (.STATUS); ! Report error
- ; 5644 3
- ; 5645 3 RETURN .STATUS;
- ; 5646 2 END;
-
-
-
- .PSECT $OWN$,NOEXE,2
-
- ;NEXT_CHR
- U.83: .BLKB 4 ; 00850
- ;STATUS
- U.84: .BLKB 4 ; 00854
- ;REPEAT_COUNT
- U.85: .BLKB 4 ; 00858
- ;CHAR_8_BIT
- U.86: .BLKB 4 ; 0085C
- ;CHRS
- U.87: .BLKB 20 ; 00860
- ;CHR_IDX
- U.88: .BLKB 4 ; 00874
- ;OLD_CHAR_8_BIT
- U.89: .BLKB 4 ; 00878
- ;OLD_CHRS
- U.90: .BLKB 20 ; 0087C
- ;OLD_CHR_IDX
- U.91: .BLKB 4 ; 00890
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;GET_QUOTED_CHAR
- U.92: .WORD ^M<R2,R3> ;Save R2,R3 5577 000C 00000
- MOVAB G^RCV_QUOTE_CHR, R3 ;RCV_QUOTE_CHR, R3 53 00000000G 00 9E 00002
- MOVAB G^U.84, R2 ;U.84, R2 52 00000000' 00 9E 00009
- MOVL -4(R2), R0 ;NEXT_CHR, R0 5585 50 FC A2 D0 00010
- BLSS 1$ ;1$ 11 19 00014
- MOVL R0, 8(R2) ;R0, CHAR_8_BIT 5588 08 A2 50 D0 00016
- MNEGL #1, -4(R2) ;#1, NEXT_CHR 5589 FC A2 01 CE 0001A
- MOVL #134316043, (R2) ;#134316043, STATUS 5590 62 0801800B 8F D0 0001E
- BRB 3$ ;3$ 1F 11 00025
- 1$: CMPL R0, #-1 ;R0, #-1 5594 FFFFFFFF 8F 50 D1 00027
- BNEQ 2$ ;2$ 0F 12 0002E
- MOVL -12(R2), R0 ;GET_CHR_ROUTINE, R0 5596 50 F4 A2 D0 00030
- PUSHAB 8(R2) ;CHAR_8_BIT 08 A2 9F 00034
- CALLS #1, (R0) ;#1, (R0) 60 01 FB 00037
- MOVL R0, (R2) ;R0, STATUS 62 50 D0 0003A
- BRB 3$ ;3$ 07 11 0003D
- 2$: MOVL #134316131, (R2) ;#134316131, STATUS 5598 62 08018063 8F D0 0003F
- 3$: MOVL (R2), R0 ;STATUS, R0 5600 50 62 D0 00046
- CMPL R0, #134316043 ;R0, #134316043 0801800B 8F 50 D1 00049
- BNEQ 11$ ;11$ 6F 12 00050
- MOVL 8(R2), R1 ;CHAR_8_BIT, R1 5614 51 08 A2 D0 00052
- CLRL R0 ;R0 50 D4 00056
- CMPZV #0, #7, R1, #32 ;#0, #7, R1, #32 07 00 ED 00058
- ; 20 51 0005B
- BGEQ 4$ ;4$ 04 18 0005D
- INCL R0 ;R0 50 D6 0005F
- BRB 6$ ;6$ 2E 11 00061
- 4$: CMPZV #0, #7, R1, #127 ;#0, #7, R1, #127 07 00 ED 00063
- ; 0000007F 8F 51 00066
- BEQL 6$ ;6$ 23 13 0006C
- CMPZV #0, #7, R1, (R3) ;#0, #7, R1, RCV_QUOTE_CHR 5615 07 00 ED 0006E
- ; 63 51 00071
- BEQL 6$ ;6$ 1C 13 00073
- BLBC -2080(R2), 5$ ;FLAG_REPEAT, 5$ 09 F7E0 C2 E9 00075
- CMPZV #0, #7, R1, -2128(R2) ;#0, #7, R1, REPT_CHR 5616 07 00 ED 0007A
- ; F7B0 C2 51 0007D
- BEQL 6$ ;6$ 0E 13 00081
- 5$: BLBC -2084(R2), 10$ ;FLAG_8QUOTE, 10$ 30 F7DC C2 E9 00083
- CMPZV #0, #7, R1, -2100(R2) ;#0, #7, R1, SEND_8QUOTE_CHR 5617 07 00 ED 00088
- ; F7CC C2 51 0008B
- BNEQ 10$ ;10$ 27 12 0008F
- 6$: BLBS R0, 7$ ;R0, 7$ 5625 0B 50 E8 00091
- CMPZV #0, #7, R1, #127 ;#0, #7, R1, #127 07 00 ED 00094
- ; 0000007F 8F 51 00097
- BNEQ 8$ ;8$ 0B 12 0009D
- 7$: XORL3 #64, R1, 12(R2) ;#64, R1, CHRS 5627 51 00000040 8F CD 0009F
- ; 0C A2 000A6
- BRB 9$ ;9$ 04 11 000A8
- 8$: MOVL R1, 12(R2) ;R1, CHRS 5629 0C A2 51 D0 000AA
- 9$: MOVL #1, 32(R2) ;#1, CHR_IDX 5631 20 A2 01 D0 000AE
- MOVL (R3), 16(R2) ;RCV_QUOTE_CHR, CHRS+4 5632 10 A2 63 D0 000B2
- BRB 12$ ;12$ 1B 11 000B6
- 10$: CLRL 32(R2) ;CHR_IDX 5636 20 A2 D4 000B8
- MOVL R1, 12(R2) ;R1, CHRS 5637 0C A2 51 D0 000BB
- BRB 12$ ;12$ 12 11 000BF
- 11$: CMPL R0, #134316131 ;R0, #134316131 5643 08018063 8F 50 D1 000C1
- BEQL 12$ ;12$ 09 13 000C8
- PUSHL R0 ;R0 50 DD 000CA
- CALLS #1, G^KRM_ERROR ;#1, KRM_ERROR 00000000G 00 01 FB 000CC
- 12$: MOVL (R2), R0 ;STATUS, R0 5645 50 62 D0 000D3
- RET ; 04 000D6
-
- ; Routine Size: 215 bytes, Routine Base: $CODE$ + 21C2
-
-
- ; 5647 2 ROUTINE GET_8_QUOTED_CHAR =
- ; 5648 2 !
- ; 5649 2 ! This routine will get the quoted representation of a character
- ; 5650 2 ! (by calling GET_QUOTED_CHAR), and return the 8th-bit quoted
- ; 5651 2 ! representation.
- ; 5652 2 !
- ; 5653 3 BEGIN
- ; 5654 3
- ; 5655 3 IF (STATUS = GET_QUOTED_CHAR ()) EQL KER_NORMAL
- ; 5656 3 THEN
- ; 5657 4 BEGIN
- ; 5658 4 !
- ; 5659 4 ! Determine if we must quote the eighth bit (parity bit on)
- ; 5660 4 !
- ; 5661 4
- ; 5662 5 IF (((.CHRS [0] AND %O'177') NEQ .CHRS [0]) AND .FLAG_8QUOTE)
- ; 5663 4 THEN
- ; 5664 5 BEGIN
- ; 5665 5 CHRS [0] = .CHRS [0] AND %O'177';
- ; 5666 5 CHR_IDX = .CHR_IDX + 1;
- ; 5667 5 CHRS [.CHR_IDX] = .SEND_8QUOTE_CHR;
- ; 5668 4 END;
- ; 5669 4
- ; 5670 3 END;
- ; 5671 3
- ; 5672 3 RETURN .STATUS;
- ; 5673 2 END;
-
-
-
-
-
- ;GET_8_QUOTED_CHAR
- U.93: .WORD ^M<R2> ;Save R2 5647 0004 00000
- MOVAB G^U.87, R2 ;U.87, R2 52 00000000' 00 9E 00002
- CALLS #0, W^U.92 ;#0, U.92 5655 FF1B CF 00 FB 00009
- MOVL R0, -12(R2) ;R0, STATUS F4 A2 50 D0 0000E
- CMPL R0, #134316043 ;R0, #134316043 0801800B 8F 50 D1 00012
- BNEQ 1$ ;1$ 21 12 00019
- MOVL (R2), R0 ;CHRS, R0 5662 50 62 D0 0001B
- CMPZV #0, #7, R0, R0 ;#0, #7, R0, R0 07 00 ED 0001E
- ; 50 50 00021
- BEQL 1$ ;1$ 17 13 00023
- BLBC -2096(R2), 1$ ;FLAG_8QUOTE, 1$ 12 F7D0 C2 E9 00025
- EXTZV #0, #7, (R2), (R2) ;#0, #7, CHRS, CHRS 5665 07 00 EF 0002A
- ; 62 62 0002D
- INCL 20(R2) ;CHR_IDX 5666 14 A2 D6 0002F
- MOVL 20(R2), R0 ;CHR_IDX, R0 5667 50 14 A2 D0 00032
- MOVL -2112(R2), (R2)[R0] ;SEND_8QUOTE_CHR, CHRS[R0] 6240 F7C0 C2 D0 00036
- 1$: MOVL -12(R2), R0 ;STATUS, R0 5672 50 F4 A2 D0 0003C
- RET ; 04 00040
-
- ; Routine Size: 65 bytes, Routine Base: $CODE$ + 2299
-
-
- ; 5674 2 !
- ; 5675 2 ! Start of code for BFR_FILL
- ; 5676 2 !
- ; 5677 2 ! Initialize pointer and count
- ; 5678 2 !
- ; 5679 2 SIZE = 0;
- ; 5680 2 IF .SEND_PKT_SIZE GTR 94 ! [108]
- ; 5681 2 THEN ! [108]
- ; 5682 3 BEGIN ! [108]
- ; 5683 3 POINTER = CH$PTR (SND_MSG, PKT_MSGX, CHR_SIZE); ! [108]
- ; 5684 3 MAX_SIZE = .SEND_PKT_SIZE - PKT_MSGX + 1 - (.BLK_CHK_TYPE - CHK_1CHAR);
- ; 5685 3 END ! [108]
- ; 5686 2 ELSE ! [108]
- ; 5687 3 BEGIN ! [108]
- ; 5688 3 POINTER = CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE); ! [108]
- ; 5689 3 MAX_SIZE = .SEND_PKT_SIZE - PKT_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR);
- ; 5690 2 END; ! [108]
- ; 5691 2 !
- ; 5692 2 ! If last call got an error or eof, return it now
- ; 5693 2 !
- ; 5694 2
- ; 5695 2 IF NOT .FIRST_FLAG AND (.STATUS NEQ KER_NORMAL) THEN RETURN .STATUS;
- ; 5696 2
- ; 5697 2 !
- ; 5698 2 ! If first time for a file prime the pump with the first character.
- ; 5699 2 !
- ; 5700 2
- ; 5701 2 IF .FIRST_FLAG
- ; 5702 2 THEN
- ; 5703 3 BEGIN
- ; 5704 3 FIRST_FLAG = FALSE;
- ; 5705 3 NEXT_CHR = -1; ! No backed up character
- ; 5706 3
- ; 5707 3 IF .FLAG_8QUOTE THEN STATUS = GET_8_QUOTED_CHAR () ELSE STATUS = GET_QUOTED_CHAR ();
- ; 5708 3
- ; 5709 3 IF .STATUS NEQ KER_NORMAL THEN RETURN .STATUS;
- ; 5710 3
- ; 5711 3 OLD_CHAR_8_BIT = .CHAR_8_BIT;
- ; 5712 3
- ; 5713 3 INCR OLD_CHR_IDX FROM 0 TO .CHR_IDX DO
- ; 5714 3 OLD_CHRS [.OLD_CHR_IDX] = .CHRS [.OLD_CHR_IDX];
- ; 5715 3
- ; 5716 3 OLD_CHR_IDX = .CHR_IDX;
- ; 5717 3 REPEAT_COUNT = 0; ! Character was not repeated yet
- ; 5718 3 ! Will always be incremented
- ; 5719 2 END;
- ; 5720 2
- ; 5721 2 !
- ; 5722 2 ! Otherwise, loop until we fill buffer
- ; 5723 2 !
- ; 5724 2
- ; 5725 2 WHILE .SIZE LSS .MAX_SIZE DO ! Normal exit is via an EXITLOOP
- ; 5726 3 BEGIN
- ; 5727 3 !
- ; 5728 3 ! Check if we are doing run compression
- ; 5729 3 !
- ; 5730 3
- ; 5731 3 IF .FLAG_REPEAT
- ; 5732 3 THEN
- ; 5733 4 BEGIN
- ; 5734 4 !
- ; 5735 4 ! Here with previous character in OLD_xxx. As long as we
- ; 5736 4 ! are getting the same character, just count the run.
- ; 5737 4 !
- ; 5738 4
- ; 5739 4 WHILE (.CHAR_8_BIT EQL .OLD_CHAR_8_BIT) AND (.REPEAT_COUNT LSS 94) DO
- ; 5740 5 BEGIN
- ; 5741 5 REPEAT_COUNT = .REPEAT_COUNT + 1;
- ; 5742 5
- ; 5743 5 IF .FLAG_8QUOTE THEN STATUS = GET_8_QUOTED_CHAR () ELSE STATUS = GET_QUOTED_CHAR ();
- ; 5744 5
- ; 5745 5 IF .STATUS NEQ KER_NORMAL
- ; 5746 5 THEN
- ; 5747 5
- ; 5748 5 IF .STATUS NEQ KER_EOF
- ; 5749 5 THEN
- ; 5750 5 CHAR_8_BIT = NO_CHAR
- ; 5751 5 ELSE
- ; 5752 6 BEGIN
- ; 5753 6 CHAR_8_BIT = EOF_CHAR;
- ; 5754 6 CHR_IDX = -1;
- ; 5755 5 END;
- ; 5756 5
- ; 5757 4 END;
- ; 5758 4
- ; 5759 5 IF .OLD_CHR_IDX + 1 + 2 LSS ((.OLD_CHR_IDX + 1)*.REPEAT_COUNT)
- ; 5760 4 THEN
- ; 5761 5 BEGIN
- ; 5762 5
- ; 5763 5 IF .SIZE + .OLD_CHR_IDX + 1 + 2 GTR .MAX_SIZE
- ; 5764 5 THEN
- ; 5765 6 BEGIN
- ; 5766 6
- ; 5767 6 IF .CHAR_8_BIT EQL .OLD_CHAR_8_BIT
- ; 5768 6 THEN
- ; 5769 7 BEGIN
- ; 5770 7 NEXT_CHR = .CHAR_8_BIT;
- ; 5771 7 REPEAT_COUNT = .REPEAT_COUNT - 1;
- ; 5772 6 END;
- ; 5773 6
- ; 5774 6 IF .CHAR_8_BIT EQL EOF_CHAR
- ; 5775 6 THEN
- ; 5776 7 BEGIN
- ; 5777 7 NEXT_CHR = EOF_CHAR; ! Remember EOF for next time
- ; 5778 7 STATUS = KER_NORMAL; ! And give good return now
- ; 5779 6 END;
- ; 5780 6
- ; 5781 6 EXITLOOP;
- ; 5782 5 END;
- ; 5783 5
- ; 5784 5 OLD_CHRS [.OLD_CHR_IDX + 1] = CHAR (.REPEAT_COUNT);
- ; 5785 5 OLD_CHRS [.OLD_CHR_IDX + 2] = .REPT_CHR;
- ; 5786 5 OLD_CHR_IDX = .OLD_CHR_IDX + 2;
- ; 5787 5 !
- ; 5788 5 ! Count the number of file characters this represents
- ; 5789 5 !
- ; 5790 5 SMSG_DATA_CHARS = .SMSG_DATA_CHARS + .REPEAT_COUNT - 1;
- ; 5791 5 FILE_CHARS = .FILE_CHARS + .REPEAT_COUNT - 1;
- ; 5792 5 REPEAT_COUNT = 1; ! Only one time for this string
- ; 5793 4 END;
- ; 5794 4
- ; 5795 4 !
- ; 5796 4 ! If we don't have enough room for this character, wait till next
- ; 5797 4 ! time.
- ; 5798 4 !
- ; 5799 4
- ; 5800 4 IF .SIZE + (.OLD_CHR_IDX + 1)*.REPEAT_COUNT GTR .MAX_SIZE
- ; 5801 4 THEN
- ; 5802 5 BEGIN
- ; 5803 5 ! If the next character is the same, the count will get incremented
- ; 5804 5 ! next time we enter, so back it off now.
- ; 5805 5
- ; 5806 5 IF .CHAR_8_BIT EQL .OLD_CHAR_8_BIT
- ; 5807 5 THEN
- ; 5808 6 BEGIN
- ; 5809 6 NEXT_CHR = .CHAR_8_BIT;
- ; 5810 6 REPEAT_COUNT = .REPEAT_COUNT - 1;
- ; 5811 5 END;
- ; 5812 5 !
- ; 5813 5 ! If this is the last character of the file,
- ; 5814 5 ! remember that for next time, but give good return now.
- ; 5815 5 !
- ; 5816 5 IF .CHAR_8_BIT EQL EOF_CHAR
- ; 5817 5 THEN
- ; 5818 6 BEGIN
- ; 5819 6 NEXT_CHR = EOF_CHAR;
- ; 5820 6 STATUS = KER_NORMAL
- ; 5821 5 END;
- ; 5822 5
- ; 5823 5 EXITLOOP;
- ; 5824 4 END;
- ; 5825 4
- ; 5826 4 SMSG_DATA_CHARS = .SMSG_DATA_CHARS + .REPEAT_COUNT;
- ; 5827 4 FILE_CHARS = .FILE_CHARS + .REPEAT_COUNT;
- ; 5828 4
- ; 5829 4 DECR REPEAT_COUNT FROM .REPEAT_COUNT TO 1 DO
- ; 5830 4
- ; 5831 4 DECR I FROM .OLD_CHR_IDX TO 0 DO
- ; 5832 5 BEGIN
- ; 5833 5 CH$WCHAR_A (.OLD_CHRS [.I], POINTER);
- ; 5834 5 SIZE = .SIZE + 1;
- ; 5835 4 END;
- ; 5836 4
- ; 5837 4 !
- ; 5838 4 ! If we had to defer EOF condition, reactivate it now.
- ; 5839 4 !
- ; 5840 4 IF (.CHAR_8_BIT EQL EOF_CHAR) THEN STATUS = KER_EOF;
- ; 5841 4 !
- ; 5842 4 ! If we got an error (or EOF) then exit
- ; 5843 4 !
- ; 5844 4
- ; 5845 4 IF (.STATUS NEQ KER_NORMAL) THEN EXITLOOP;
- ; 5846 4
- ; 5847 4 !
- ; 5848 4 ! Otherwise, copy the character which broke the run
- ; 5849 4 !
- ; 5850 4 OLD_CHAR_8_BIT = .CHAR_8_BIT;
- ; 5851 4
- ; 5852 4 INCR OLD_CHR_IDX FROM 0 TO .CHR_IDX DO
- ; 5853 4 OLD_CHRS [.OLD_CHR_IDX] = .CHRS [.OLD_CHR_IDX];
- ; 5854 4
- ; 5855 4 OLD_CHR_IDX = .CHR_IDX;
- ; 5856 4 REPEAT_COUNT = 0;
- ; 5857 4 END
- ; 5858 3 ELSE
- ; 5859 3 !
- ; 5860 3 ! Here if we are not doing run compression. We can do things much
- ; 5861 3 ! easier.
- ; 5862 3 !
- ; 5863 4 BEGIN
- ; 5864 4
- ; 5865 4 IF (.SIZE + .CHR_IDX + 1) GTR .MAX_SIZE THEN EXITLOOP;
- ; 5866 4
- ; 5867 4 SMSG_DATA_CHARS = .SMSG_DATA_CHARS + 1;
- ; 5868 4 FILE_CHARS = .FILE_CHARS + 1;
- ; 5869 4
- ; 5870 4 DECR CHR_IDX FROM .CHR_IDX TO 0 DO
- ; 5871 5 BEGIN
- ; 5872 5 CH$WCHAR_A (.CHRS [.CHR_IDX], POINTER);
- ; 5873 5 SIZE = .SIZE + 1;
- ; 5874 4 END;
- ; 5875 4
- ; 5876 4 IF .FLAG_8QUOTE THEN STATUS = GET_8_QUOTED_CHAR () ELSE STATUS = GET_QUOTED_CHAR ();
- ; 5877 4
- ; 5878 4 IF (.STATUS NEQ KER_NORMAL) THEN EXITLOOP;
- ; 5879 4
- ; 5880 3 END;
- ; 5881 3
- ; 5882 2 END;
- ; 5883 2
- ; 5884 2 ! [108] Return negative size if we use extend packet format
- ; 5885 2
- ; 5886 2 IF .SEND_PKT_SIZE GTR 94 ! [108]
- ; 5887 2 THEN ! [108]
- ; 5888 2 SIZE = -.SIZE; ! [108]
- ; 5889 2
- ; 5890 2 !
- ; 5891 2 ! Determine if we really stored anything into the buffer.
- ; 5892 2 !
- ; 5893 2
- ; 5894 2 IF .SIZE NEQ 0 THEN RETURN KER_NORMAL ELSE RETURN .STATUS;
- ; 5895 2
- ; 5896 1 END; ! End of BFR_FILL
-
-
-
-
-
- ;BFR_FILL
- U.29: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 5516 01FC 00000
- MOVAB G^SMSG_DATA_CHARS, R8 ;SMSG_DATA_CHARS, R8 58 00000000G 00 9E 00002
- MOVAB B^U.93, R7 ;U.93, R7 57 B3 AF 9E 00009
- MOVAB G^U.52, R6 ;U.52, R6 56 00000000' 00 9E 0000D
- CLRL (R6) ;SIZE 5679 66 D4 00014
- SUBL3 #49, -16(R6), R0 ;#49, BLK_CHK_TYPE, R0 5684 F0 A6 31 C3 00016
- ; 50 0001A
- MOVL -48(R6), R2 ;SEND_PKT_SIZE, R2 5680 52 D0 A6 D0 0001B
- CMPL R2, #94 ;R2, #94 0000005E 8F 52 D1 0001F
- BLEQ 1$ ;1$ 0F 15 00026
- MOVAB 1039(R6), R5 ;SND_MSG+7, POINTER 5683 55 040F C6 9E 00028
- SUBL3 R0, R2, R0 ;R0, R2, R0 5684 52 50 C3 0002D
- ; 50 00030
- MOVAB -6(R0), R2 ;-6(R0), MAX_SIZE 52 FA A0 9E 00031
- BRB 2$ ;2$ 0B 11 00035
- 1$: MOVAB 1036(R6), R5 ;SND_MSG+4, POINTER 5688 55 040C C6 9E 00037
- SUBL2 R0, R2 ;R0, R2 5689 52 50 C2 0003C
- SUBL2 #3, R2 ;#3, MAX_SIZE 52 03 C2 0003F
- 2$: BLBS 4(AP), 4$ ;FIRST_FLAG, 4$ 5695 12 04 AC E8 00042
- CMPL 2072(R6), #134316043 ;STATUS, #134316043 0801800B 8F 0818 C6 D1 00046
- BEQL 3$ ;3$ 03 13 0004F
- BRW 38$ ;38$ 021F 31 00051
- 3$: BLBC 4(AP), 11$ ;FIRST_FLAG, 11$ 5701 4C 04 AC E9 00054
- 4$: CLRL 4(AP) ;FIRST_FLAG 5704 04 AC D4 00058
- MNEGL #1, 2068(R6) ;#1, NEXT_CHR 5705 0814 C6 01 CE 0005B
- BLBC -12(R6), 5$ ;FLAG_8QUOTE, 5$ 5707 05 F4 A6 E9 00060
- CALLS #0, (R7) ;#0, GET_8_QUOTED_CHAR 67 00 FB 00064
- BRB 6$ ;6$ 05 11 00067
- 5$: CALLS #0, -215(R7) ;#0, GET_QUOTED_CHAR FF29 C7 00 FB 00069
- 6$: MOVL R0, 2072(R6) ;R0, STATUS 0818 C6 50 D0 0006E
- CMPL R0, #134316043 ;R0, #134316043 5709 0801800B 8F 50 D1 00073
- BEQL 7$ ;7$ 01 13 0007A
- RET ; 04 0007C
- 7$: MOVL 2080(R6), 2108(R6) ;CHAR_8_BIT, OLD_CHAR_8_BIT 5711 083C C6 0820 C6 D0 0007D
- MOVL 2104(R6), R1 ;CHR_IDX, R1 5713 51 0838 C6 D0 00084
- MNEGL #1, R0 ;#1, OLD_CHR_IDX 50 01 CE 00089
- BRB 9$ ;9$ 09 11 0008C
- 8$: MOVL 2084(R6)[R0], 2112(R6)[R0] ;CHRS[OLD_CHR_IDX], OLD_CHRS- 5714 0840 C640 0824 C640 D0 0008E
- ;[OLD_CHR_IDX]
- 9$: AOBLEQ R1, R0, 8$ ;R1, OLD_CHR_IDX, 8$ 50 51 F3 00097
- ; F3 0009A
- 10$: MOVL R1, 2132(R6) ;R1, OLD_CHR_IDX 5716 0854 C6 51 D0 0009B
- CLRL 2076(R6) ;REPEAT_COUNT 5717 081C C6 D4 000A0
- 11$: MOVL (R6), R1 ;SIZE, R1 5725 51 66 D0 000A4
- CMPL R1, R2 ;R1, MAX_SIZE 52 51 D1 000A7
- BLSS 12$ ;12$ 03 19 000AA
- BRW 36$ ;36$ 01AB 31 000AC
- 12$: BLBS -8(R6), 13$ ;FLAG_REPEAT, 13$ 5731 03 F8 A6 E8 000AF
- BRW 31$ ;31$ 015F 31 000B3
- 13$: CMPL 2080(R6), 2108(R6) ;CHAR_8_BIT, OLD_CHAR_8_BIT 5739 083C C6 0820 C6 D1 000B6
- BNEQ 17$ ;17$ 47 12 000BD
- CMPL 2076(R6), #94 ;REPEAT_COUNT, #94 0000005E 8F 081C C6 D1 000BF
- BGEQ 17$ ;17$ 3C 18 000C8
- INCL 2076(R6) ;REPEAT_COUNT 5741 081C C6 D6 000CA
- BLBC -12(R6), 14$ ;FLAG_8QUOTE, 14$ 5743 05 F4 A6 E9 000CE
- CALLS #0, (R7) ;#0, GET_8_QUOTED_CHAR 67 00 FB 000D2
- BRB 15$ ;15$ 05 11 000D5
- 14$: CALLS #0, -215(R7) ;#0, GET_QUOTED_CHAR FF29 C7 00 FB 000D7
- 15$: MOVL R0, 2072(R6) ;R0, STATUS 0818 C6 50 D0 000DC
- CMPL R0, #134316043 ;R0, #134316043 5745 0801800B 8F 50 D1 000E1
- BEQL 13$ ;13$ CC 13 000E8
- CMPL R0, #134316131 ;R0, #134316131 5748 08018063 8F 50 D1 000EA
- BEQL 16$ ;16$ 07 13 000F1
- MNEGL #1, 2080(R6) ;#1, CHAR_8_BIT 5750 0820 C6 01 CE 000F3
- BRB 13$ ;13$ BC 11 000F8
- 16$: MNEGL #2, 2080(R6) ;#2, CHAR_8_BIT 5753 0820 C6 02 CE 000FA
- MNEGL #1, 2104(R6) ;#1, CHR_IDX 5754 0838 C6 01 CE 000FF
- BRB 13$ ;13$ B0 11 00104
- 17$: MOVL 2132(R6), R3 ;OLD_CHR_IDX, R3 5759 53 0854 C6 D0 00106
- MOVAB 3(R3), R4 ;3(R3), R4 54 03 A3 9E 0010B
- MOVAB 1(R3), R1 ;1(R3), R1 51 01 A3 9E 0010F
- MULL3 2076(R6), R1, R0 ;REPEAT_COUNT, R1, R0 51 081C C6 C5 00113
- ; 50 00118
- CMPL R4, R0 ;R4, R0 50 54 D1 00119
- BGEQ 19$ ;19$ 4C 18 0011C
- MOVL (R6), R0 ;SIZE, R0 5763 50 66 D0 0011E
- MOVAB 3(R3)[R0], R0 ;3(R3)[R0], R0 50 03 A340 9E 00121
- CMPL R0, R2 ;R0, MAX_SIZE 52 50 D1 00126
- BLEQ 18$ ;18$ 0E 15 00129
- MOVL 2080(R6), R0 ;CHAR_8_BIT, R0 5767 50 0820 C6 D0 0012B
- CMPL R0, 2108(R6) ;R0, OLD_CHAR_8_BIT 083C C6 50 D1 00130
- BEQL 20$ ;20$ 55 13 00135
- BRB 21$ ;21$ 5774 5C 11 00137
- 18$: MOVL 2076(R6), R0 ;REPEAT_COUNT, R0 5784 50 081C C6 D0 00139
- MOVAB 32(R0), 2112(R6)[R1] ;32(R0), OLD_CHRS[R1] 0840 C641 20 A0 9E 0013E
- MOVL -56(R6), 2120(R6)[R3] ;REPT_CHR, OLD_CHRS+8[R3] 5785 0848 C643 C8 A6 D0 00145
- ADDL2 #2, 2132(R6) ;#2, OLD_CHR_IDX 5786 0854 C6 02 C0 0014C
- MOVL (R8), R1 ;SMSG_DATA_CHARS, R1 5790 51 68 D0 00151
- MOVAB -1(R0)[R1], (R8) ;-1(R0)[R1], SMSG_DATA_CHARS 68 FF A041 9E 00154
- MOVL 2036(R6), R1 ;FILE_CHARS, R1 5791 51 07F4 C6 D0 00159
- MOVAB -1(R0)[R1], 2036(R6) ;-1(R0)[R1], FILE_CHARS 07F4 C6 FF A041 9E 0015E
- MOVL #1, 2076(R6) ;#1, REPEAT_COUNT 5792 081C C6 01 D0 00165
- 19$: MOVL 2132(R6), R4 ;OLD_CHR_IDX, R4 5800 54 0854 C6 D0 0016A
- MOVAB 1(R4), R0 ;1(R4), R0 50 01 A4 9E 0016F
- MULL2 2076(R6), R0 ;REPEAT_COUNT, R0 50 081C C6 C4 00173
- ADDL2 (R6), R0 ;SIZE, R0 50 66 C0 00178
- CMPL R0, R2 ;R0, MAX_SIZE 52 50 D1 0017B
- BLEQ 23$ ;23$ 2F 15 0017E
- MOVL 2080(R6), R0 ;CHAR_8_BIT, R0 5806 50 0820 C6 D0 00180
- CMPL R0, 2108(R6) ;R0, OLD_CHAR_8_BIT 083C C6 50 D1 00185
- BNEQ 21$ ;21$ 09 12 0018A
- 20$: MOVL R0, 2068(R6) ;R0, NEXT_CHR 5809 0814 C6 50 D0 0018C
- DECL 2076(R6) ;REPEAT_COUNT 5810 081C C6 D7 00191
- 21$: CMPL R0, #-2 ;R0, #-2 5816 FFFFFFFE 8F 50 D1 00195
- BNEQ 22$ ;22$ 0E 12 0019C
- MNEGL #2, 2068(R6) ;#2, NEXT_CHR 5819 0814 C6 02 CE 0019E
- MOVL #134316043, 2072(R6) ;#134316043, STATUS 5820 0818 C6 0801800B 8F D0 001A3
- 22$: BRW 36$ ;36$ 5823 00AB 31 001AC
- 23$: MOVL 2076(R6), R1 ;REPEAT_COUNT, R1 5826 51 081C C6 D0 001AF
- ADDL2 R1, (R8) ;R1, SMSG_DATA_CHARS 68 51 C0 001B4
- ADDL2 R1, 2036(R6) ;R1, FILE_CHARS 5827 07F4 C6 51 C0 001B7
- INCL R1 ;REPEAT_COUNT 5829 51 D6 001BC
- BRB 27$ ;27$ 11 11 001BE
- 24$: MOVAB 1(R4), R0 ;1(R4), I 5831 50 01 A4 9E 001C0
- BRB 26$ ;26$ 08 11 001C4
- 25$: CVTLB 2112(R6)[R0], (R5)+ ;OLD_CHRS[I], (POINTER)+ 5833 85 0840 C640 F6 001C6
- INCL (R6) ;SIZE 5834 66 D6 001CC
- 26$: SOBGEQ R0, 25$ ;I, 25$ F5 50 F4 001CE
- 27$: SOBGTR R1, 24$ ;REPEAT_COUNT, 24$ EC 51 F5 001D1
- MOVL 2080(R6), R0 ;CHAR_8_BIT, R0 5840 50 0820 C6 D0 001D4
- CMPL R0, #-2 ;R0, #-2 FFFFFFFE 8F 50 D1 001D9
- BNEQ 28$ ;28$ 09 12 001E0
- MOVL #134316131, 2072(R6) ;#134316131, STATUS 0818 C6 08018063 8F D0 001E2
- 28$: CMPL 2072(R6), #134316043 ;STATUS, #134316043 5845 0801800B 8F 0818 C6 D1 001EB
- BNEQ 36$ ;36$ 64 12 001F4
- MOVL R0, 2108(R6) ;R0, OLD_CHAR_8_BIT 5850 083C C6 50 D0 001F6
- MOVL 2104(R6), R1 ;CHR_IDX, R1 5852 51 0838 C6 D0 001FB
- MNEGL #1, R0 ;#1, OLD_CHR_IDX 50 01 CE 00200
- BRB 30$ ;30$ 09 11 00203
- 29$: MOVL 2084(R6)[R0], 2112(R6)[R0] ;CHRS[OLD_CHR_IDX], OLD_CHRS- 5853 0840 C640 0824 C640 D0 00205
- ;[OLD_CHR_IDX]
- 30$: AOBLEQ R1, R0, 29$ ;R1, OLD_CHR_IDX, 29$ 50 51 F3 0020E
- ; F3 00211
- BRW 10$ ;10$ 5855 FE86 31 00212
- 31$: MOVL 2104(R6), R0 ;CHR_IDX, R0 5865 50 0838 C6 D0 00215
- MOVAB 1(R0)[R1], R1 ;1(R0)[R1], R1 51 01 A041 9E 0021A
- CMPL R1, R2 ;R1, MAX_SIZE 52 51 D1 0021F
- BGTR 36$ ;36$ 36 14 00222
- INCL (R8) ;SMSG_DATA_CHARS 5867 68 D6 00224
- INCL 2036(R6) ;FILE_CHARS 5868 07F4 C6 D6 00226
- INCL R0 ;CHR_IDX 5870 50 D6 0022A
- BRB 33$ ;33$ 08 11 0022C
- 32$: CVTLB 2084(R6)[R0], (R5)+ ;CHRS[CHR_IDX], (POINTER)+ 5872 85 0824 C640 F6 0022E
- INCL (R6) ;SIZE 5873 66 D6 00234
- 33$: SOBGEQ R0, 32$ ;CHR_IDX, 32$ F5 50 F4 00236
- BLBC -12(R6), 34$ ;FLAG_8QUOTE, 34$ 5876 05 F4 A6 E9 00239
- CALLS #0, (R7) ;#0, GET_8_QUOTED_CHAR 67 00 FB 0023D
- BRB 35$ ;35$ 05 11 00240
- 34$: CALLS #0, -215(R7) ;#0, GET_QUOTED_CHAR FF29 C7 00 FB 00242
- 35$: MOVL R0, 2072(R6) ;R0, STATUS 0818 C6 50 D0 00247
- CMPL 2072(R6), #134316043 ;STATUS, #134316043 5878 0801800B 8F 0818 C6 D1 0024C
- BNEQ 36$ ;36$ 03 12 00255
- BRW 11$ ;11$ FE4A 31 00257
- 36$: CMPL -48(R6), #94 ;SEND_PKT_SIZE, #94 5886 0000005E 8F D0 A6 D1 0025A
- BLEQ 37$ ;37$ 03 15 00262
- MNEGL (R6), (R6) ;SIZE, SIZE 5888 66 66 CE 00264
- 37$: TSTL (R6) ;SIZE 5894 66 D5 00267
- BEQL 38$ ;38$ 08 13 00269
- MOVL #134316043, R0 ;#134316043, R0 50 0801800B 8F D0 0026B
- RET ; 04 00272
- 38$: MOVL 2072(R6), R0 ;STATUS, R0 50 0818 C6 D0 00273
- RET ; 04 00278
-
- ; Routine Size: 633 bytes, Routine Base: $CODE$ + 22DA
-
-
- ; 5897 1 %SBTTL 'BFR_EMPTY'
- ; 5898 1 ROUTINE BFR_EMPTY =
- ; 5899 1
- ; 5900 1 !++
- ; 5901 1 ! FUNCTIONAL DESCRIPTION:
- ; 5902 1 !
- ; 5903 1 ! This routine will empty the data from the REC_MSG message buffer
- ; 5904 1 ! to the file. It will process quoting characters.
- ; 5905 1 !
- ; 5906 1 ! CALLING SEQUENCE:
- ; 5907 1 !
- ; 5908 1 ! Flag = BFR_EMPTY();
- ; 5909 1 !
- ; 5910 1 ! INPUT PARAMETERS:
- ; 5911 1 !
- ; 5912 1 ! None.
- ; 5913 1 !
- ; 5914 1 ! IMPLICIT INPUTS:
- ; 5915 1 !
- ; 5916 1 ! None.
- ; 5917 1 !
- ; 5918 1 ! OUTPUT PARAMETERS:
- ; 5919 1 !
- ; 5920 1 ! True - No problems writing the file.
- ; 5921 1 ! False - I/O error writing the file.
- ; 5922 1 !
- ; 5923 1 ! IMPLICIT OUTPUTS:
- ; 5924 1 !
- ; 5925 1 ! None.
- ; 5926 1 !
- ; 5927 1 ! COMPLETION CODES:
- ; 5928 1 !
- ; 5929 1 ! None.
- ; 5930 1 !
- ; 5931 1 ! SIDE EFFECTS:
- ; 5932 1 !
- ; 5933 1 ! None.
- ; 5934 1 !
- ; 5935 1 !--
- ; 5936 1
- ; 5937 2 BEGIN
- ; 5938 2
- ; 5939 2 LOCAL
- ; 5940 2 STATUS, ! Status returned by various routines
- ; 5941 2 REPEAT_COUNT, ! Count of times to repeat character
- ; 5942 2 TURN_BIT_8_ON, ! If eight bit quoting
- ; 5943 2 COUNTER, ! Count of the characters left
- ; 5944 2 CHARACTER, ! Character we are processing
- ; 5945 2 POINTER; ! Pointer to the data
- ; 5946 2
- ; 5947 2 POINTER = CH$PTR (REC_MSG, .RECV_PKT_MSG, CHR_SIZE); ! [108]
- ; 5948 2 COUNTER = 0;
- ; 5949 2
- ; 5950 2 WHILE (.COUNTER LSS .REC_LENGTH) DO
- ; 5951 3 BEGIN
- ; 5952 3 CHARACTER = CH$RCHAR_A (POINTER);
- ; 5953 3 COUNTER = .COUNTER + 1;
- ; 5954 3 !
- ; 5955 3 ! If the character is the repeat character (and we are doing repeat
- ; 5956 3 ! compression), then get the count.
- ; 5957 3 !
- ; 5958 3
- ; 5959 4 IF ((.CHARACTER EQL .REPT_CHR) AND .FLAG_REPEAT)
- ; 5960 3 THEN
- ; 5961 4 BEGIN
- ; 5962 4 REPEAT_COUNT = UNCHAR (CH$RCHAR_A (POINTER) AND %O'177');
- ; 5963 4 CHARACTER = CH$RCHAR_A (POINTER);
- ; 5964 4 COUNTER = .COUNTER + 2;
- ; 5965 4 END
- ; 5966 3 ELSE
- ; 5967 3 REPEAT_COUNT = 1;
- ; 5968 3
- ; 5969 3 !
- ; 5970 3 ! If the character is an eight bit quoting character and we are doing eight
- ; 5971 3 ! bit quoting then turn on the flag so we turn the eighth bit on when we
- ; 5972 3 ! get the real character.
- ; 5973 3 !
- ; 5974 3
- ; 5975 4 IF ((.CHARACTER EQL .SEND_8QUOTE_CHR) AND .FLAG_8QUOTE)
- ; 5976 3 THEN
- ; 5977 4 BEGIN
- ; 5978 4 TURN_BIT_8_ON = TRUE;
- ; 5979 4 COUNTER = .COUNTER + 1;
- ; 5980 4 CHARACTER = CH$RCHAR_A (POINTER);
- ; 5981 4 END
- ; 5982 3 ELSE
- ; 5983 3 TURN_BIT_8_ON = FALSE;
- ; 5984 3
- ; 5985 3 !
- ; 5986 3 ! Now determine if we are quoting the character. If so then we must eat
- ; 5987 3 ! the quoting character and get the real character.
- ; 5988 3 !
- ; 5989 3
- ; 5990 3 IF .CHARACTER EQL .SEND_QUOTE_CHR
- ; 5991 3 ![035] Is this character other Kermit sends as quote?
- ; 5992 3 THEN
- ; 5993 4 BEGIN
- ; 5994 4 CHARACTER = CH$RCHAR_A (POINTER);
- ; 5995 4 COUNTER = .COUNTER + 1;
- ; 5996 4 !
- ; 5997 4 ! Determine if we must undo what someone else has done to the character
- ; 5998 4 !
- ; 5999 4
- ; P 6000 5 IF ((.CHARACTER AND %O'177') GEQ CTL (CHR_DEL)) AND ((.CHARACTER AND %O'177') LEQ CTL (
- ; 6001 5 CHR_DEL) + %O'40')
- ; 6002 4 THEN
- ; 6003 4 CHARACTER = CTL (.CHARACTER);
- ; 6004 4
- ; 6005 3 END;
- ; 6006 3
- ; 6007 3 !
- ; 6008 3 ! Turn on the eight bit if needed and then write the character out
- ; 6009 3 !
- ; 6010 3
- ; 6011 3 IF .TURN_BIT_8_ON THEN CHARACTER = .CHARACTER OR %O'200';
- ; 6012 3
- ; 6013 3 RMSG_DATA_CHARS = .RMSG_DATA_CHARS + .REPEAT_COUNT;
- ; 6014 3 FILE_CHARS = .FILE_CHARS + .REPEAT_COUNT;
- ; 6015 3
- ; 6016 3 DECR REPEAT_COUNT FROM .REPEAT_COUNT TO 1 DO
- ; 6017 4 BEGIN
- ; 6018 4 STATUS = (.PUT_CHR_ROUTINE) (.CHARACTER);
- ; 6019 4
- ; 6020 4 IF NOT .STATUS THEN RETURN .STATUS;
- ; 6021 4
- ; 6022 3 END;
- ; 6023 3
- ; 6024 2 END;
- ; 6025 2
- ; 6026 2 RETURN KER_NORMAL;
- ; 6027 1 END; ! End of BFR_EMPTY
-
-
-
-
-
- ;BFR_EMPTY
- U.28: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 5898 01FC 00000
- MOVAB G^U.59, R8 ;U.59, R8 58 00000000' 00 9E 00002
- MOVAB (R8), R0 ;REC_MSG, R0 5947 50 68 9E 00009
- ADDL3 -80(R8), R0, R5 ;RECV_PKT_MSG, R0, POINTER 50 B0 A8 C1 0000C
- ; 55 00010
- CLRL R6 ;COUNTER 5948 56 D4 00011
- 1$: CMPL R6, -8(R8) ;COUNTER, REC_LENGTH 5950 F8 A8 56 D1 00013
- BLSS 2$ ;2$ 03 19 00017
- BRW 11$ ;11$ 0088 31 00019
- 2$: MOVZBL (R5)+, R4 ;(POINTER)+, CHARACTER 5952 54 85 9A 0001C
- INCL R6 ;COUNTER 5953 56 D6 0001F
- CMPL R4, -84(R8) ;CHARACTER, REPT_CHR 5959 AC A8 54 D1 00021
- BNEQ 3$ ;3$ 17 12 00025
- BLBC -36(R8), 3$ ;FLAG_REPEAT, 3$ 13 DC A8 E9 00027
- MOVZBL (R5)+, R1 ;(POINTER)+, R1 5962 51 85 9A 0002B
- EXTZV #0, #7, R1, R3 ;#0, #7, R1, REPEAT_COUNT 07 00 EF 0002E
- ; 53 51 00031
- SUBL2 #32, R3 ;#32, REPEAT_COUNT 53 20 C2 00033
- MOVZBL (R5)+, R4 ;(POINTER)+, CHARACTER 5963 54 85 9A 00036
- ADDL2 #2, R6 ;#2, COUNTER 5964 56 02 C0 00039
- BRB 4$ ;4$ 03 11 0003C
- 3$: MOVL #1, R3 ;#1, REPEAT_COUNT 5967 53 01 D0 0003E
- 4$: CMPL R4, -56(R8) ;CHARACTER, SEND_8QUOTE_CHR 5975 C8 A8 54 D1 00041
- BNEQ 5$ ;5$ 0E 12 00045
- BLBC -40(R8), 5$ ;FLAG_8QUOTE, 5$ 0A D8 A8 E9 00047
- MOVL #1, R7 ;#1, TURN_BIT_8_ON 5978 57 01 D0 0004B
- INCL R6 ;COUNTER 5979 56 D6 0004E
- MOVZBL (R5)+, R4 ;(POINTER)+, CHARACTER 5980 54 85 9A 00050
- BRB 6$ ;6$ 02 11 00053
- 5$: CLRL R7 ;TURN_BIT_8_ON 5983 57 D4 00055
- 6$: CMPL R4, -60(R8) ;CHARACTER, SEND_QUOTE_CHR 5990 C4 A8 54 D1 00057
- BNEQ 7$ ;7$ 1B 12 0005B
- MOVZBL (R5)+, R4 ;(POINTER)+, CHARACTER 5994 54 85 9A 0005D
- INCL R6 ;COUNTER 5995 56 D6 00060
- CMPZV #0, #7, R4, #63 ;#0, #7, CHARACTER, #63 6000 07 00 ED 00062
- ; 3F 54 00065
- BLSS 7$ ;7$ 0F 19 00067
- CMPZV #0, #7, R4, #95 ;#0, #7, CHARACTER, #95 6001 07 00 ED 00069
- ; 0000005F 8F 54 0006C
- BGTR 7$ ;7$ 04 14 00072
- XORB2 #64, R4 ;#64, CHARACTER 6003 54 40 8F 8C 00074
- 7$: BLBC R7, 8$ ;TURN_BIT_8_ON, 8$ 6011 04 57 E9 00078
- BISB2 #128, R4 ;#128, CHARACTER 54 80 8F 88 0007B
- 8$: ADDL2 R3, G^RMSG_DATA_CHARS ;REPEAT_COUNT, RMSG_DATA_CHARS 6013 00000000G 00 53 C0 0007F
- ADDL2 R3, 2008(R8) ;REPEAT_COUNT, FILE_CHARS 6014 07D8 C8 53 C0 00086
- MOVAB 1(R3), R2 ;1(R3), REPEAT_COUNT 6016 52 01 A3 9E 0008B
- BRB 10$ ;10$ 0D 11 0008F
- 9$: MOVL 2036(R8), R1 ;PUT_CHR_ROUTINE, R1 6018 51 07F4 C8 D0 00091
- PUSHL R4 ;CHARACTER 54 DD 00096
- CALLS #1, (R1) ;#1, (R1) 61 01 FB 00098
- BLBC R0, 12$ ;STATUS, 12$ 6020 0D 50 E9 0009B
- 10$: SOBGTR R2, 9$ ;REPEAT_COUNT, 9$ 6016 F0 52 F5 0009E
- BRW 1$ ;1$ 5950 FF6F 31 000A1
- 11$: MOVL #134316043, R0 ;#134316043, R0 6026 50 0801800B 8F D0 000A4
- 12$: RET ; 04 000AB
-
- ; Routine Size: 172 bytes, Routine Base: $CODE$ + 2553
-
-
- ; 6028 1 %SBTTL 'Buffer filling and emptying subroutines'
- ; 6029 1 ROUTINE SET_STRING (POINTER, LENGTH, START) =
- ; 6030 1
- ; 6031 1 !++
- ; 6032 1 ! FUNCTIONAL DESCRIPTION:
- ; 6033 1 !
- ; 6034 1 ! This routine is used to set up the buffer filling and emptying
- ; 6035 1 ! routines to use a string for input (or output) rather than
- ; 6036 1 ! the file I/O routines.
- ; 6037 1 !
- ; 6038 1 ! CALLING SEQUENCE:
- ; 6039 1 !
- ; 6040 1 ! SET_STRING (.POINTER, .LENGTH, .START)
- ; 6041 1 !
- ; 6042 1 ! INPUT PARAMETERS:
- ; 6043 1 !
- ; 6044 1 ! POINTER - Character pointer to string
- ; 6045 1 !
- ; 6046 1 ! LENGTH - Number of characters in string
- ; 6047 1 !
- ; 6048 1 ! START - True to start string, false to end it
- ; 6049 1 !
- ; 6050 1 ! IMPLICIT INPUTS:
- ; 6051 1 !
- ; 6052 1 ! None.
- ; 6053 1 !
- ; 6054 1 ! OUPTUT PARAMETERS:
- ; 6055 1 !
- ; 6056 1 ! Returns 0 if START = TRUE, actual number of characters used
- ; 6057 1 ! by last string if START = FALSE.
- ; 6058 1 !
- ; 6059 1 ! IMPLICIT OUTPUTS:
- ; 6060 1 !
- ; 6061 1 ! GET_CHR_ROUTINE and PUT_CHR_ROUTINE modifed so that string
- ; 6062 1 ! routines are called instead of file I/O.
- ; 6063 1 !
- ; 6064 1 ! COMPLETION CODES:
- ; 6065 1 !
- ; 6066 1 ! None.
- ; 6067 1 !
- ; 6068 1 ! SIDE EFFECTS:
- ; 6069 1 !
- ; 6070 1 ! None.
- ; 6071 1 !
- ; 6072 1 !--
- ; 6073 1
- ; 6074 2 BEGIN
- ; 6075 2
- ; 6076 2 OWN
- ; 6077 2 STR_POINTER, ! Pointer to string
- ; 6078 2 STR_LENGTH, ! Length of string
- ; 6079 2 STR_ORG_LENGTH, ! Original length of string
- ; 6080 2 OLD_GET_CHR, ! Old get-char routine
- ; 6081 2 OLD_PUT_CHR; ! Old put-char routine
- ; 6082 2
- ; 6083 2 !
- ; 6084 2 ! Routine to get a character from the string
- ; 6085 2 !
- ; 6086 2 ROUTINE GET_STRING (CHAR_ADDRESS) =
- ; 6087 3 BEGIN
- ; 6088 3 !
- ; 6089 3 ! If some characters are left, count down the length and get next character
- ; 6090 3 ! Otherwise return and end of file indication.
- ; 6091 3 !
- ; 6092 3
- ; 6093 3 IF .STR_LENGTH GTR 0
- ; 6094 3 THEN
- ; 6095 4 BEGIN
- ; 6096 4 STR_LENGTH = .STR_LENGTH - 1;
- ; 6097 4 .CHAR_ADDRESS = CH$RCHAR_A (STR_POINTER);
- ; 6098 4 RETURN KER_NORMAL;
- ; 6099 4 END
- ; 6100 3 ELSE
- ; 6101 3 RETURN KER_EOF;
- ; 6102 3
- ; 6103 2 END; ! End of GET_STRING
-
-
-
- .PSECT $OWN$,NOEXE,2
-
- ;STR_POINTER
- U.94: .BLKB 4 ; 00894
- ;STR_LENGTH
- U.95: .BLKB 4 ; 00898
- ;STR_ORG_LENGTH
- U.96: .BLKB 4 ; 0089C
- ;OLD_GET_CHR
- U.97: .BLKB 4 ; 008A0
- ;OLD_PUT_CHR
- U.98: .BLKB 4 ; 008A4
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;GET_STRING
- U.99: .WORD ^M<R2> ;Save R2 6086 0004 00000
- MOVAB G^U.95, R2 ;U.95, R2 52 00000000' 00 9E 00002
- TSTL (R2) ;STR_LENGTH 6093 62 D5 00009
- BLEQ 1$ ;1$ 15 15 0000B
- DECL (R2) ;STR_LENGTH 6096 62 D7 0000D
- MOVL -4(R2), R0 ;STR_POINTER, R0 6097 50 FC A2 D0 0000F
- MOVZBL (R0), @4(AP) ;(R0), @CHAR_ADDRESS 04 BC 60 9A 00013
- INCL -4(R2) ;STR_POINTER FC A2 D6 00017
- MOVL #134316043, R0 ;#134316043, R0 6098 50 0801800B 8F D0 0001A
- RET ; 04 00021
- 1$: MOVL #134316131, R0 ;#134316131, R0 6101 50 08018063 8F D0 00022
- RET ; 04 00029
-
- ; Routine Size: 42 bytes, Routine Base: $CODE$ + 25FF
-
-
- ; 6104 2 ROUTINE PUT_STRING (CHAR_VALUE) =
- ; 6105 3 BEGIN
- ; 6106 3 !
- ; 6107 3 ! If there is enough room to store another character, store the character
- ; 6108 3 ! and count it. Otherwise return a line too long indication.
- ; 6109 3 !
- ; 6110 3
- ; 6111 3 IF .STR_LENGTH GTR 0
- ; 6112 3 THEN
- ; 6113 4 BEGIN
- ; 6114 4 STR_LENGTH = .STR_LENGTH - 1;
- ; 6115 4 CH$WCHAR_A (.CHAR_VALUE, STR_POINTER);
- ; 6116 4 RETURN KER_NORMAL;
- ; 6117 4 END
- ; 6118 3 ELSE
- ; 6119 3 RETURN KER_LINTOOLNG;
- ; 6120 3
- ; 6121 2 END; ! End of PUT_STRING
-
-
-
-
-
- ;PUT_STRING
- U.100: .WORD ^M<R2> ;Save R2 6104 0004 00000
- MOVAB G^U.95, R2 ;U.95, R2 52 00000000' 00 9E 00002
- TSTL (R2) ;STR_LENGTH 6111 62 D5 00009
- BLEQ 1$ ;1$ 15 15 0000B
- DECL (R2) ;STR_LENGTH 6114 62 D7 0000D
- MOVL -4(R2), R0 ;STR_POINTER, R0 6115 50 FC A2 D0 0000F
- MOVB 4(AP), (R0) ;CHAR_VALUE, (R0) 60 04 AC 90 00013
- INCL -4(R2) ;STR_POINTER FC A2 D6 00017
- MOVL #134316043, R0 ;#134316043, R0 6116 50 0801800B 8F D0 0001A
- RET ; 04 00021
- 1$: MOVL #134316098, R0 ;#134316098, R0 6119 50 08018042 8F D0 00022
- RET ; 04 00029
-
- ; Routine Size: 42 bytes, Routine Base: $CODE$ + 2629
-
-
- ; 6122 2 !
- ; 6123 2 ! If we have a request to start a string (input or output), save the old
- ; 6124 2 ! routines and set up ours. Also save the string pointer and length for
- ; 6125 2 ! use by our get/put routines.
- ; 6126 2 ! Otherwise this is a request to stop using the string routines, so reset
- ; 6127 2 ! the old routines and return the actual number of characters read or
- ; 6128 2 ! written
- ; 6129 2 !
- ; 6130 2
- ; 6131 2 IF .START
- ; 6132 2 THEN
- ; 6133 3 BEGIN
- ; 6134 3 STR_POINTER = .POINTER;
- ; 6135 3 STR_ORG_LENGTH = .LENGTH;
- ; 6136 3 STR_LENGTH = .LENGTH;
- ; 6137 3 OLD_GET_CHR = .GET_CHR_ROUTINE;
- ; 6138 3 OLD_PUT_CHR = .PUT_CHR_ROUTINE;
- ; 6139 3 GET_CHR_ROUTINE = GET_STRING;
- ; 6140 3 PUT_CHR_ROUTINE = PUT_STRING;
- ; 6141 3 RETURN 0;
- ; 6142 3 END
- ; 6143 2 ELSE
- ; 6144 3 BEGIN
- ; 6145 3 GET_CHR_ROUTINE = .OLD_GET_CHR;
- ; 6146 3 PUT_CHR_ROUTINE = .OLD_PUT_CHR;
- ; 6147 3 RETURN .STR_ORG_LENGTH - .STR_LENGTH;
- ; 6148 2 END;
- ; 6149 2
- ; 6150 1 END; ! End of SET_STRING
-
-
-
-
-
- ;SET_STRING
- U.30: .WORD ^M<R2> ;Save R2 6029 0004 00000
- MOVAB G^U.67, R2 ;U.67, R2 52 00000000' 00 9E 00002
- BLBC 12(AP), 1$ ;START, 1$ 6131 1A 0C AC E9 00009
- MOVL 8(AP), 84(R2) ;LENGTH, STR_ORG_LENGTH 6135 54 A2 08 AC D0 0000D
- MOVQ 4(AP), 76(R2) ;POINTER, STR_POINTER 6134 4C A2 04 AC 7D 00012
- MOVQ (R2), 88(R2) ;GET_CHR_ROUTINE, OLD_GET_CHR 6137 58 A2 62 7D 00017
- MOVAB B^U.99, (R2) ;U.99, GET_CHR_ROUTINE 6139 62 8E AF 9E 0001B
- MOVAB B^U.100, 4(R2) ;U.100, PUT_CHR_ROUTINE 6140 04 A2 B4 AF 9E 0001F
- CLRL R0 ;R0 6141 50 D4 00024
- RET ; 04 00026
- 1$: MOVQ 88(R2), (R2) ;OLD_GET_CHR, GET_CHR_ROUTINE 6145 62 58 A2 7D 00027
- SUBL3 80(R2), 84(R2), R0 ;STR_LENGTH, STR_ORG_LENGTH, R0 6147 54 A2 50 A2 C3 0002B
- ; 50 00030
- RET ; 04 00031
-
- ; Routine Size: 50 bytes, Routine Base: $CODE$ + 2653
-
-
- ; 6151 1 %SBTTL 'Add parity routine'
- ; 6152 1 ROUTINE DO_PARITY (MESSAGE, LENGTH) : NOVALUE =
- ; 6153 1
- ; 6154 1 !++
- ; 6155 1 ! FUNCTIONAL DESCRIPTION:
- ; 6156 1 !
- ; 6157 1 ! This routine will add parity for a complete message that is to be
- ; 6158 1 ! sent to the remote Kermit.
- ; 6159 1 !
- ; 6160 1 ! CALLING SEQUENCE:
- ; 6161 1 !
- ; 6162 1 ! DO_PARITY (Message_address, Message_length);
- ; 6163 1 !
- ; 6164 1 ! INPUT PARAMETERS:
- ; 6165 1 !
- ; 6166 1 ! Message_address - Address of the message to put parity on.
- ; 6167 1 ! Message_length - Lengtho of the message.
- ; 6168 1 !
- ; 6169 1 ! IMPLICIT INPUTS:
- ; 6170 1 !
- ; 6171 1 ! None.
- ; 6172 1 !
- ; 6173 1 ! OUTPUT PARAMETERS:
- ; 6174 1 !
- ; 6175 1 ! None.
- ; 6176 1 !
- ; 6177 1 ! IMPLICIT OUTPUTS:
- ; 6178 1 !
- ; 6179 1 ! None.
- ; 6180 1 !
- ; 6181 1 ! COMPLETION CODES:
- ; 6182 1 !
- ; 6183 1 ! None.
- ; 6184 1 !
- ; 6185 1 ! SIDE EFFECTS:
- ; 6186 1 !
- ; 6187 1 ! None.
- ; 6188 1 !
- ; 6189 1 !--
- ; 6190 1
- ; 6191 2 BEGIN
- ; 6192 2
- ; 6193 2 MAP
- ; 6194 2 MESSAGE : REF VECTOR [CH$ALLOCATION (MAX_MSG, CHR_SIZE)];
- ; 6195 2
- ; 6196 2 LOCAL
- ; 6197 2 POINTER; ! Point into the message
- ; 6198 2
- ; 6199 2 IF NOT .DEV_PARITY_FLAG
- ; 6200 2 THEN
- ; 6201 3 BEGIN
- ; 6202 3 POINTER = CH$PTR (.MESSAGE,, CHR_SIZE);
- ; 6203 3
- ; 6204 3 INCR I FROM 1 TO .LENGTH DO
- ; 6205 3 CH$WCHAR_A (GEN_PARITY (CH$RCHAR (.POINTER)), POINTER);
- ; 6206 3
- ; 6207 2 END;
- ; 6208 2
- ; 6209 1 END; ! End of DO_PARITY
-
-
-
-
-
- ;DO_PARITY
- U.22: .WORD ^M<R2,R3> ;Save R2,R3 6152 000C 00000
- BLBS G^DEV_PARITY_FLAG, 3$ ;DEV_PARITY_FLAG, 3$ 6199 1A 00000000G 00 E8 00002
- MOVL 4(AP), R2 ;MESSAGE, POINTER 6202 52 04 AC D0 00009
- CLRL R3 ;I 6204 53 D4 0000D
- BRB 2$ ;2$ 0D 11 0000F
- 1$: MOVZBL (R2), -(SP) ;(POINTER), -(SP) 6205 7E 62 9A 00011
- CALLS #1, G^U.23 ;#1, U.23 00000000V 00 01 FB 00014
- MOVB R0, (R2)+ ;R0, (POINTER)+ 82 50 90 0001B
- 2$: AOBLEQ 8(AP), R3, 1$ ;LENGTH, I, 1$ 53 08 AC F3 0001E
- ; EE 00022
- 3$: RET ; 6209 04 00023
-
- ; Routine Size: 36 bytes, Routine Base: $CODE$ + 2685
-
-
- ; 6210 1 %SBTTL 'Parity routine'
- ; 6211 1
- ; 6212 1 GLOBAL ROUTINE GEN_PARITY (CHARACTER) =
- ; 6213 1
- ; 6214 1 !++
- ; 6215 1 ! FUNCTIONAL DESCRIPTION:
- ; 6216 1 !
- ; 6217 1 ! This routine will add parity to the character that is supplied.
- ; 6218 1 !
- ; 6219 1 ! CALLING SEQUENCE:
- ; 6220 1 !
- ; 6221 1 ! CHARACTER = GEN_PARITY(CHARACTER)
- ; 6222 1 !
- ; 6223 1 ! INPUT PARAMETERS:
- ; 6224 1 !
- ; 6225 1 ! CHARACTER - Produce the parity for this character depending on the
- ; 6226 1 ! setting of the SET PARITY switch.
- ; 6227 1 !
- ; 6228 1 ! IMPLICIT INPUTS:
- ; 6229 1 !
- ; 6230 1 ! None.
- ; 6231 1 !
- ; 6232 1 ! OUTPUT PARAMETERS:
- ; 6233 1 !
- ; 6234 1 ! None.
- ; 6235 1 !
- ; 6236 1 ! IMPLICIT OUTPUTS:
- ; 6237 1 !
- ; 6238 1 ! None.
- ; 6239 1 !
- ; 6240 1 ! COMPLETION CODES:
- ; 6241 1 !
- ; 6242 1 ! None.
- ; 6243 1 !
- ; 6244 1 ! SIDE EFFECTS:
- ; 6245 1 !
- ; 6246 1 ! None.
- ; 6247 1 !
- ; 6248 1 !--
- ; 6249 1
- ; 6250 2 BEGIN
- ; 6251 2
- ; 6252 2 LOCAL
- ; 6253 2 TEMP_CHAR;
- ; 6254 2
- ; 6255 2
- ; 6256 2 CASE .PARITY_TYPE FROM PR_MIN TO PR_MAX OF
- ; 6257 2 SET
- ; 6258 2
- ; 6259 2 [PR_NONE] :
- ; 6260 2 RETURN .CHARACTER;
- ; 6261 2
- ; 6262 2 [PR_SPACE] :
- ; 6263 2 RETURN .CHARACTER AND %O'177';
- ; 6264 2
- ; 6265 2 [PR_MARK] :
- ; 6266 2 RETURN .CHARACTER OR %O'200';
- ; 6267 2
- ; 6268 2 [PR_ODD] :
- ; 6269 2 TEMP_CHAR = .CHARACTER AND %O'177' OR %O'200';
- ; 6270 2
- ; 6271 2 [PR_EVEN] :
- ; 6272 2 TEMP_CHAR = .CHARACTER AND %O'177';
- ; 6273 2 TES;
- ; 6274 2
- ; 6275 2 TEMP_CHAR = .TEMP_CHAR XOR (.TEMP_CHAR^-4);
- ; 6276 2 TEMP_CHAR = .TEMP_CHAR XOR (.TEMP_CHAR^-2);
- ; 6277 2
- ; 6278 2 IF .TEMP_CHAR<0, 2> EQL %B'01' OR .TEMP_CHAR<0, 2> EQL %B'10'
- ; 6279 2 THEN
- ; 6280 2 RETURN .CHARACTER AND %O'177' OR %O'200'
- ; 6281 2 ELSE
- ; 6282 2 RETURN .CHARACTER AND %O'177';
- ; 6283 2
- ; 6284 1 END; ! End of GEN_PARITY
-
-
-
-
-
- U.23:
- .ENTRY GEN_PARITY, ^M<R2> ;GEN_PARITY, Save R2 6212 0004 00000
- MOVL 4(AP), R2 ;CHARACTER, R2 6260 52 04 AC D0 00002
- CASEL G^PARITY_TYPE, #0, #4 ;PARITY_TYPE, #0, #4 6256 00 00000000G 00 CF 00006
- ; 04 0000D
- 1$: .WORD 2$-1$,- ;2$-1$,- 000E 000A 0000E
- 3$-1$,- ;3$-1$,- 0017 0023 00012
- 5$-1$,- ;5$-1$,- 0051 00016
- 4$-1$,- ;4$-1$,-
- 8$-1$ ;8$-1$
- 2$: MOVL R2, R0 ;R2, R0 6260 50 52 D0 00018
- RET ; 04 0001B
- 3$: BISL3 #128, R2, R0 ;#128, R2, R0 6266 52 00000080 8F C9 0001C
- ; 50 00023
- RET ; 04 00024
- 4$: EXTZV #0, #7, R2, R0 ;#0, #7, R2, TEMP_CHAR 6269 07 00 EF 00025
- ; 50 52 00028
- INSV #1, #7, #1, R0 ;#1, #7, #1, TEMP_CHAR 07 01 F0 0002A
- ; 50 01 0002D
- BRB 6$ ;6$ 05 11 0002F
- 5$: EXTZV #0, #7, R2, R0 ;#0, #7, R2, TEMP_CHAR 6272 07 00 EF 00031
- ; 50 52 00034
- 6$: ASHL #-4, R0, R1 ;#-4, TEMP_CHAR, R1 6275 50 FC 8F 78 00036
- ; 51 0003A
- XORL2 R1, R0 ;R1, TEMP_CHAR 50 51 CC 0003B
- ASHL #-2, R0, R1 ;#-2, TEMP_CHAR, R1 6276 50 FE 8F 78 0003E
- ; 51 00042
- XORL2 R1, R0 ;R1, TEMP_CHAR 50 51 CC 00043
- CMPZV #0, #2, R0, #1 ;#0, #2, TEMP_CHAR, #1 6278 02 00 ED 00046
- ; 01 50 00049
- BEQL 7$ ;7$ 07 13 0004B
- CMPZV #0, #2, R0, #2 ;#0, #2, TEMP_CHAR, #2 02 00 ED 0004D
- ; 02 50 00050
- BNEQ 8$ ;8$ 0B 12 00052
- 7$: EXTZV #0, #7, R2, R0 ;#0, #7, R2, R0 6280 07 00 EF 00054
- ; 50 52 00057
- INSV #1, #7, #1, R0 ;#1, #7, #1, R0 07 01 F0 00059
- ; 50 01 0005C
- RET ; 04 0005E
- 8$: EXTZV #0, #7, R2, R0 ;#0, #7, R2, R0 07 00 EF 0005F
- ; 50 52 00062
- RET ; 6282 04 00064
-
- ; Routine Size: 101 bytes, Routine Base: $CODE$ + 26A9
-
-
- ; 6285 1
- ; 6286 1 %SBTTL 'Per transfer -- Initialization'
- ; 6287 1 ROUTINE INIT_XFR : NOVALUE =
- ; 6288 1
- ; 6289 1 !++
- ; 6290 1 ! FUNCTIONAL DESCRIPTION:
- ; 6291 1 !
- ; 6292 1 ! This routine will initialize the various locations that the
- ; 6293 1 ! send and receive statistics are kept.
- ; 6294 1 !
- ; 6295 1 ! CALLING SEQUENCE:
- ; 6296 1 !
- ; 6297 1 ! INIT_XFR();
- ; 6298 1 !
- ; 6299 1 ! INPUT PARAMETERS:
- ; 6300 1 !
- ; 6301 1 ! None.
- ; 6302 1 !
- ; 6303 1 ! IMPLICIT INPUTS:
- ; 6304 1 !
- ; 6305 1 ! None.
- ; 6306 1 !
- ; 6307 1 ! OUTPUT PARAMETERS:
- ; 6308 1 !
- ; 6309 1 ! None.
- ; 6310 1 !
- ; 6311 1 ! IMPLICIT OUTPUTS:
- ; 6312 1 !
- ; 6313 1 ! None.
- ; 6314 1 !
- ; 6315 1 ! COMPLETION CODES:
- ; 6316 1 !
- ; 6317 1 ! None.
- ; 6318 1 !
- ; 6319 1 ! SIDE EFFECTS:
- ; 6320 1 !
- ; 6321 1 ! None.
- ; 6322 1 !
- ; 6323 1 !--
- ; 6324 1
- ; 6325 2 BEGIN
- ; 6326 2 !
- ; 6327 2 ! Determine if we should do 8 bit quoting
- ; 6328 2 !
- ; 6329 2
- ; 6330 2 IF .PARITY_TYPE NEQ PR_NONE
- ; 6331 2 THEN
- ; 6332 3 BEGIN
- ; 6333 3 RECV_8QUOTE_CHR = .RCV_8QUOTE_CHR;
- ; 6334 3 END
- ; 6335 2 ELSE
- ; 6336 3 BEGIN
- ; 6337 3 RECV_8QUOTE_CHR = %C'Y';
- ; 6338 2 END;
- ; 6339 2
- ; 6340 2 NUM_RETRIES = 0;
- ; 6341 2 SEND_8QUOTE_CHR = .RECV_8QUOTE_CHR;
- ; 6342 2 !
- ; 6343 2 ! Send parameters that may not get set before we need them for the first
- ; 6344 2 ! time.
- ; 6345 2 !
- ; 6346 2 SEND_PKT_SIZE = ABS (.SND_PKT_SIZE);
- ; 6347 2 SEND_NPAD = ABS (.SND_NPAD);
- ; 6348 2 SEND_PADCHAR = ABS (.SND_PADCHAR);
- ; 6349 2 SEND_TIMEOUT = ABS (.SND_TIMEOUT);
- ; 6350 2 SEND_EOL = ABS (.SND_EOL);
- ; 6351 2 SEND_QUOTE_CHR = ABS (.SND_QUOTE_CHR);
- ; 6352 2 !
- ; 6353 2 ! For initialization messages, we must use single character checksum
- ; 6354 2 ! When the send-init/ack sequence has been done, we will switch to the
- ; 6355 2 ! desired form
- ; 6356 2 !
- ; 6357 2 BLK_CHK_TYPE = CHK_1CHAR;
- ; 6358 2 INI_CHK_TYPE = .CHKTYPE; ! Send desired type
- ; 6359 2 !
- ; 6360 2 ! Set desired repeat character for use in we are doing send-init
- ; 6361 2 ! Will be overwritten by other ends desired character if it sends
- ; 6362 2 ! the send-init.
- ; 6363 2 !
- ; 6364 2 REPT_CHR = .SET_REPT_CHR;
- ; 6365 2 !
- ; 6366 2 ! Assume packet assembly/disassembly uses characters from a file
- ; 6367 2 !
- ; 6368 2 GET_CHR_ROUTINE = GET_FILE; ! Initialize the get-a-char routine
- ; 6369 2 PUT_CHR_ROUTINE = PUT_FILE; ! And the put-a-char
- ; 6370 2 TEXT_HEAD_FLAG = FALSE; ! And assume we will get an File header
- ; 6371 2 NO_FILE_NEEDED = FALSE; ! Assume will do file ops
- ; 6372 2 INIT_PKT_SENT = FALSE; ! And no server-init sent
- ; 6373 2 !
- ; 6374 2 ! Always start with packet number 0
- ; 6375 2 !
- ; 6376 2 MSG_NUMBER = 0; ! Initial message number
- ; 6377 2 !
- ; 6378 2 ! Stats information
- ; 6379 2 !
- ; 6380 2 SMSG_TOTAL_CHARS = 0;
- ; 6381 2 RMSG_TOTAL_CHARS = 0;
- ; 6382 2 SMSG_DATA_CHARS = 0;
- ; 6383 2 RMSG_DATA_CHARS = 0;
- ; 6384 2 SMSG_COUNT = 0;
- ; 6385 2 RMSG_COUNT = 0;
- ; 6386 2 RMSG_NAKS = 0;
- ; 6387 2 SMSG_NAKS = 0;
- ; 6388 2 XFR_TIME = SY_TIME ();
- ; 6389 1 END; ! End of INIT_XFR
-
-
-
-
-
- ;INIT_XFR
- U.32: .WORD ^M<R2> ;Save R2 6287 0004 00000
- MOVAB G^U.37, R2 ;U.37, R2 52 00000000' 00 9E 00002
- TSTL G^PARITY_TYPE ;PARITY_TYPE 6330 00000000G 00 D5 00009
- BEQL 1$ ;1$ 09 13 0000F
- MOVL G^RCV_8QUOTE_CHR, (R2) ;RCV_8QUOTE_CHR, RECV_8QUOTE_CHR 6333 62 00000000G 00 D0 00011
- BRB 2$ ;2$ 04 11 00018
- 1$: MOVZBL #89, (R2) ;#89, RECV_8QUOTE_CHR 6337 62 59 8F 9A 0001A
- 2$: CLRL 68(R2) ;NUM_RETRIES 6340 44 A2 D4 0001E
- MOVL (R2), 32(R2) ;RECV_8QUOTE_CHR, SEND_8QUOTE_CHR 6341 20 A2 62 D0 00021
- MOVL G^SND_PKT_SIZE, R0 ;SND_PKT_SIZE, R0 6346 50 00000000G 00 D0 00025
- BGEQ 3$ ;3$ 03 18 0002C
- MNEGL R0, R0 ;R0, R0 50 50 CE 0002E
- 3$: MOVL R0, 12(R2) ;R0, SEND_PKT_SIZE 0C A2 50 D0 00031
- MOVL G^SND_NPAD, R0 ;SND_NPAD, R0 6347 50 00000000G 00 D0 00035
- BGEQ 4$ ;4$ 03 18 0003C
- MNEGL R0, R0 ;R0, R0 50 50 CE 0003E
- 4$: MOVL R0, 16(R2) ;R0, SEND_NPAD 10 A2 50 D0 00041
- MOVL G^SND_PADCHAR, R0 ;SND_PADCHAR, R0 6348 50 00000000G 00 D0 00045
- BGEQ 5$ ;5$ 03 18 0004C
- MNEGL R0, R0 ;R0, R0 50 50 CE 0004E
- 5$: MOVL R0, 20(R2) ;R0, SEND_PADCHAR 14 A2 50 D0 00051
- MOVL G^SND_TIMEOUT, R0 ;SND_TIMEOUT, R0 6349 50 00000000G 00 D0 00055
- BGEQ 6$ ;6$ 03 18 0005C
- MNEGL R0, R0 ;R0, R0 50 50 CE 0005E
- 6$: MOVL R0, G^SEND_TIMEOUT ;R0, SEND_TIMEOUT 00000000G 00 50 D0 00061
- MOVL G^SND_EOL, R0 ;SND_EOL, R0 6350 50 00000000G 00 D0 00068
- BGEQ 7$ ;7$ 03 18 0006F
- MNEGL R0, R0 ;R0, R0 50 50 CE 00071
- 7$: MOVL R0, 24(R2) ;R0, SEND_EOL 18 A2 50 D0 00074
- MOVL G^SND_QUOTE_CHR, R0 ;SND_QUOTE_CHR, R0 6351 50 00000000G 00 D0 00078
- BGEQ 8$ ;8$ 03 18 0007F
- MNEGL R0, R0 ;R0, R0 50 50 CE 00081
- 8$: MOVL R0, 28(R2) ;R0, SEND_QUOTE_CHR 1C A2 50 D0 00084
- MOVL #49, 44(R2) ;#49, BLK_CHK_TYPE 6357 2C A2 31 D0 00088
- MOVL G^CHKTYPE, 40(R2) ;CHKTYPE, INI_CHK_TYPE 6358 28 A2 00000000G 00 D0 0008C
- MOVL G^SET_REPT_CHR, 4(R2) ;SET_REPT_CHR, REPT_CHR 6364 04 A2 00000000G 00 D0 00094
- MOVAB G^GET_FILE, 2120(R2) ;GET_FILE, GET_CHR_ROUTINE 6368 0848 C2 00000000G 00 9E 0009C
- MOVAB G^PUT_FILE, 2124(R2) ;PUT_FILE, PUT_CHR_ROUTINE 6369 084C C2 00000000G 00 9E 000A5
- CLRQ 2100(R2) ;TEXT_HEAD_FLAG 6370 0834 C2 7C 000AE
- CLRL 2108(R2) ;INIT_PKT_SENT 6372 083C C2 D4 000B2
- CLRL 72(R2) ;MSG_NUMBER 6376 48 A2 D4 000B6
- CLRL G^SMSG_TOTAL_CHARS ;SMSG_TOTAL_CHARS 6380 00000000G 00 D4 000B9
- CLRL G^RMSG_TOTAL_CHARS ;RMSG_TOTAL_CHARS 6381 00000000G 00 D4 000BF
- CLRL G^SMSG_DATA_CHARS ;SMSG_DATA_CHARS 6382 00000000G 00 D4 000C5
- CLRL G^RMSG_DATA_CHARS ;RMSG_DATA_CHARS 6383 00000000G 00 D4 000CB
- CLRL G^SMSG_COUNT ;SMSG_COUNT 6384 00000000G 00 D4 000D1
- CLRL G^RMSG_COUNT ;RMSG_COUNT 6385 00000000G 00 D4 000D7
- CLRL G^RMSG_NAKS ;RMSG_NAKS 6386 00000000G 00 D4 000DD
- CLRL G^SMSG_NAKS ;SMSG_NAKS 6387 00000000G 00 D4 000E3
- CALLS #0, G^SY_TIME ;#0, SY_TIME 6388 00000000G 00 00 FB 000E9
- MOVL R0, G^XFR_TIME ;R0, XFR_TIME 00000000G 00 50 D0 000F0
- RET ; 6389 04 000F7
-
- ; Routine Size: 248 bytes, Routine Base: $CODE$ + 270E
-
-
- ; 6390 1 %SBTTL 'Statistics -- Finish message transfer'
- ; 6391 1 ROUTINE END_STATS : NOVALUE =
- ; 6392 1
- ; 6393 1 !++
- ; 6394 1 ! FUNCTIONAL DESCRIPTION:
- ; 6395 1 !
- ; 6396 1 ! This routine will end the collection of the statistices. It will
- ; 6397 1 ! update the various overall statistic parameters.
- ; 6398 1 !
- ; 6399 1 ! CALLING SEQUENCE:
- ; 6400 1 !
- ; 6401 1 ! END_STATS ();
- ; 6402 1 !
- ; 6403 1 ! INPUT PARAMETERS:
- ; 6404 1 !
- ; 6405 1 ! None.
- ; 6406 1 !
- ; 6407 1 ! IMPLICIT INPUTS:
- ; 6408 1 !
- ; 6409 1 ! None.
- ; 6410 1 !
- ; 6411 1 ! OUTPUT PARAMETERS:
- ; 6412 1 !
- ; 6413 1 ! None.
- ; 6414 1 !
- ; 6415 1 ! IMPLICIT OUTPUTS:
- ; 6416 1 !
- ; 6417 1 ! None.
- ; 6418 1 !
- ; 6419 1 ! COMPLETION CODES:
- ; 6420 1 !
- ; 6421 1 ! None.
- ; 6422 1 !
- ; 6423 1 ! SIDE EFFECTS:
- ; 6424 1 !
- ; 6425 1 ! None.
- ; 6426 1 !
- ; 6427 1 !--
- ; 6428 1
- ; 6429 2 BEGIN
- ; 6430 2 SND_COUNT = .SND_COUNT + .SMSG_COUNT;
- ; 6431 2 RCV_COUNT = .RCV_COUNT + .RMSG_COUNT;
- ; 6432 2 SND_TOTAL_CHARS = .SND_TOTAL_CHARS + .SMSG_TOTAL_CHARS;
- ; 6433 2 SND_DATA_CHARS = .SND_DATA_CHARS + .SMSG_DATA_CHARS;
- ; 6434 2 RCV_TOTAL_CHARS = .RCV_TOTAL_CHARS + .RMSG_TOTAL_CHARS;
- ; 6435 2 RCV_DATA_CHARS = .RCV_DATA_CHARS + .RMSG_DATA_CHARS;
- ; 6436 2 SND_NAKS = .SND_NAKS + .SMSG_NAKS;
- ; 6437 2 RCV_NAKS = .RCV_NAKS + .RMSG_NAKS;
- ; 6438 2 XFR_TIME = SY_TIME () - .XFR_TIME;
- ; 6439 2 TOTAL_TIME = .TOTAL_TIME + .XFR_TIME;
- ; 6440 1 END; ! End of END_STATS
-
-
-
-
-
- ;END_STATS
- U.18: .WORD ^M<R2> ;Save R2 6391 0004 00000
- MOVAB G^XFR_TIME, R2 ;XFR_TIME, R2 52 00000000G 00 9E 00002
- ADDL2 G^SMSG_COUNT, G^SND_COUNT ;SMSG_COUNT, SND_COUNT 6430 00000000G 00 00000000G 00 C0 00009
- ADDL2 G^RMSG_COUNT, G^RCV_COUNT ;RMSG_COUNT, RCV_COUNT 6431 00000000G 00 00000000G 00 C0 00014
- ADDL2 G^SMSG_TOTAL_CHARS, - ;SMSG_TOTAL_CHARS, SND_TOTAL_CHARS 6432 00000000G 00 00000000G 00 C0 0001F
- G^SND_TOTAL_CHARS ;
- ADDL2 G^SMSG_DATA_CHARS, - ;SMSG_DATA_CHARS, SND_DATA_CHARS 6433 00000000G 00 00000000G 00 C0 0002A
- G^SND_DATA_CHARS ;
- ADDL2 G^RMSG_TOTAL_CHARS, - ;RMSG_TOTAL_CHARS, RCV_TOTAL_CHARS 6434 00000000G 00 00000000G 00 C0 00035
- G^RCV_TOTAL_CHARS ;
- ADDL2 G^RMSG_DATA_CHARS, - ;RMSG_DATA_CHARS, RCV_DATA_CHARS 6435 00000000G 00 00000000G 00 C0 00040
- G^RCV_DATA_CHARS ;
- ADDL2 G^SMSG_NAKS, G^SND_NAKS ;SMSG_NAKS, SND_NAKS 6436 00000000G 00 00000000G 00 C0 0004B
- ADDL2 G^RMSG_NAKS, G^RCV_NAKS ;RMSG_NAKS, RCV_NAKS 6437 00000000G 00 00000000G 00 C0 00056
- CALLS #0, G^SY_TIME ;#0, SY_TIME 6438 00000000G 00 00 FB 00061
- SUBL3 (R2), R0, (R2) ;XFR_TIME, R0, XFR_TIME 50 62 C3 00068
- ; 62 0006B
- ADDL2 (R2), G^TOTAL_TIME ;XFR_TIME, TOTAL_TIME 6439 00000000G 00 62 C0 0006C
- RET ; 6440 04 00073
-
- ; Routine Size: 116 bytes, Routine Base: $CODE$ + 2806
-
-
- ; 6441 1 %SBTTL 'Status type out -- STS_OUTPUT'
- ; 6442 1 ROUTINE STS_OUTPUT : NOVALUE =
- ; 6443 1
- ; 6444 1 !++
- ; 6445 1 ! FUNCTIONAL DESCRIPTION:
- ; 6446 1 !
- ; 6447 1 ! This routine will output the current status of a transfer.
- ; 6448 1 ! This is used when the user types a ^A during a transfer.
- ; 6449 1 !
- ; 6450 1 ! CALLING SEQUENCE:
- ; 6451 1 !
- ; 6452 1 ! STS_OUTPUT ()
- ; 6453 1 !
- ; 6454 1 ! INPUT PARAMETERS:
- ; 6455 1 !
- ; 6456 1 ! None.
- ; 6457 1 !
- ; 6458 1 ! IMPLICIT INPUTS:
- ; 6459 1 !
- ; 6460 1 ! Statistics blocks, file names, etc.
- ; 6461 1 !
- ; 6462 1 ! OUPTUT PARAMETERS:
- ; 6463 1 !
- ; 6464 1 ! None.
- ; 6465 1 !
- ; 6466 1 ! IMPLICIT OUTPUTS:
- ; 6467 1 !
- ; 6468 1 ! None.
- ; 6469 1 !
- ; 6470 1 ! COMPLETION CODES:
- ; 6471 1 !
- ; 6472 1 ! None.
- ; 6473 1 !
- ; 6474 1 ! SIDE EFFECTS:
- ; 6475 1 !
- ; 6476 1 ! None.
- ; 6477 1 !
- ; 6478 1 !--
- ; 6479 1
- ; 6480 2 BEGIN
- ; 6481 2 TT_CHAR (%C'['); ! Start the message
- ; 6482 2
- ; 6483 2 CASE .STATE FROM STATE_MIN TO STATE_MAX OF
- ; 6484 2 SET
- ; 6485 2
- ; 6486 2 [STATE_ID, STATE_II] :
- ; 6487 2 TT_TEXT (UPLIT (%ASCIZ'Idle in server mode'));
- ; 6488 2
- ; 6489 2 [STATE_S, STATE_SF] :
- ; 6490 3 BEGIN
- ; 6491 3 TT_TEXT (UPLIT (%ASCIZ'Initializing for sending file '));
- ; 6492 3 TT_TEXT (FILE_NAME);
- ; 6493 2 END;
- ; 6494 2
- ; 6495 2 [STATE_SI] :
- ; 6496 2 TT_TEXT (UPLIT (%ASCIZ'Initializing for remote command'));
- ; 6497 2
- ; 6498 2 [STATE_SG] :
- ; 6499 2 TT_TEXT (UPLIT (%ASCIZ'Waiting for response to remote command'));
- ; 6500 2
- ; 6501 2 [STATE_SD] :
- ; 6502 3 BEGIN
- ; 6503 3 TT_NUMBER (.FILE_CHARS);
- ; 6504 3 TT_TEXT (UPLIT (%ASCIZ' characters sent for file '));
- ; 6505 3 TT_TEXT (FILE_NAME);
- ; 6506 2 END;
- ; 6507 2
- ; 6508 2 [STATE_SZ] :
- ; 6509 3 BEGIN
- ; 6510 3 TT_TEXT (UPLIT (%ASCIZ'At end of file '));
- ; 6511 3 TT_TEXT (FILE_NAME);
- ; 6512 2 END;
- ; 6513 2
- ; 6514 2 [STATE_SB] :
- ; 6515 2 TT_TEXT (UPLIT (%ASCIZ'Finishing transfer session'));
- ; 6516 2
- ; 6517 2 [STATE_R] :
- ; 6518 2 TT_TEXT (UPLIT (%ASCIZ'Waiting for initialization'));
- ; 6519 2
- ; 6520 2 [STATE_RF] :
- ; 6521 2 TT_TEXT (UPLIT (%ASCIZ'Waiting for next file or end of session'));
- ; 6522 2
- ; 6523 2 [STATE_RD] :
- ; 6524 3 BEGIN
- ; 6525 3 TT_NUMBER (.FILE_CHARS);
- ; 6526 3 TT_TEXT (UPLIT (%ASCIZ' characters received for file '));
- ; 6527 3 TT_TEXT (FILE_NAME);
- ; 6528 2 END;
- ; 6529 2
- ; 6530 2 [STATE_C] :
- ; 6531 2 TT_TEXT (UPLIT (%ASCIZ' Session complete'));
- ; 6532 2
- ; 6533 2 [STATE_A] :
- ; 6534 2 TT_TEXT (UPLIT (%ASCIZ' Session aborted'));
- ; 6535 2
- ; 6536 2 [INRANGE, OUTRANGE] :
- ; 6537 2 TT_TEXT (UPLIT (%ASCIZ' Unknown state'));
- ; 6538 2 TES;
- ; 6539 2
- ; 6540 2 SELECTONE .STATE OF
- ; 6541 2 SET
- ; 6542 2
- ; 6543 2 [STATE_S, STATE_SF, STATE_SD, STATE_SZ, STATE_SB] :
- ; 6544 3 BEGIN
- ; 6545 3
- ; 6546 3 IF .RMSG_NAKS GTR 0
- ; 6547 3 THEN
- ; 6548 4 BEGIN
- ; 6549 4 TT_TEXT (UPLIT (%ASCIZ', '));
- ; 6550 4 TT_NUMBER (.RMSG_NAKS);
- ; 6551 4 TT_TEXT (UPLIT (%ASCIZ' NAKs received'));
- ; 6552 3 END;
- ; 6553 3
- ; 6554 2 END;
- ; 6555 2
- ; 6556 2 [STATE_R, STATE_RF, STATE_RD] :
- ; 6557 3 BEGIN
- ; 6558 3
- ; 6559 3 IF .SMSG_NAKS GTR 0
- ; 6560 3 THEN
- ; 6561 4 BEGIN
- ; 6562 4 TT_TEXT (UPLIT (%ASCIZ', '));
- ; 6563 4 TT_NUMBER (.SMSG_NAKS);
- ; 6564 4 TT_TEXT (UPLIT (%ASCIZ' NAKs sent'));
- ; 6565 3 END;
- ; 6566 3
- ; 6567 2 END;
- ; 6568 2 TES;
- ; 6569 2
- ; 6570 2 TT_CHAR (%C']'); ! End the line
- ; 6571 2 TT_CRLF (); ! with a CRLF
- ; 6572 1 END; ! End of STS_OUTPUT
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.AAO: .ASCII \Idle in server mode\<0> ; 20 6E 69 20 65 6C 64 49 000B8
- ; 6D 20 72 65 76 72 65 73 000C0
- ; 00 65 64 6F 000C8
- P.AAP: .ASCII \Initializing for sending file \<0><0>
- ; 69 6C 61 69 74 69 6E 49 000CC
- ; 72 6F 66 20 67 6E 69 7A 000D4
- ; 67 6E 69 64 6E 65 73 20 000DC
- ; 00 00 20 65 6C 69 66 20 000E4
- P.AAQ: .ASCII \Initializing for remote command\<0>
- ; 69 6C 61 69 74 69 6E 49 000EC
- ; 72 6F 66 20 67 6E 69 7A 000F4
- ; 20 65 74 6F 6D 65 72 20 000FC
- ; 00 64 6E 61 6D 6D 6F 63 00104
- P.AAR: .ASCII \Waiting for response to remote command\<0><0>
- ; 20 67 6E 69 74 69 61 57 0010C
- ; 70 73 65 72 20 72 6F 66 00114
- ; 20 6F 74 20 65 73 6E 6F 0011C
- ; 63 20 65 74 6F 6D 65 72 00124
- ; 00 00 64 6E 61 6D 6D 6F 0012C
- P.AAS: .ASCII \ characters sent for file \<0><0>
- ; 74 63 61 72 61 68 63 20 00134
- ; 74 6E 65 73 20 73 72 65 0013C
- ; 6C 69 66 20 72 6F 66 20 00144
- ; 00 00 20 65 0014C
- P.AAT: .ASCII \At end of file \<0> ; 6F 20 64 6E 65 20 74 41 00150
- ; 00 20 65 6C 69 66 20 66 00158
- P.AAU: .ASCII \Finishing transfer session\<0><0>
- ; 6E 69 68 73 69 6E 69 46 00160
- ; 66 73 6E 61 72 74 20 67 00168
- ; 69 73 73 65 73 20 72 65 00170
- ; 00 00 6E 6F 00178
- P.AAV: .ASCII \Waiting for initialization\<0><0>
- ; 20 67 6E 69 74 69 61 57 0017C
- ; 74 69 6E 69 20 72 6F 66 00184
- ; 69 74 61 7A 69 6C 61 69 0018C
- ; 00 00 6E 6F 00194
- P.AAW: .ASCII \Waiting for next file or end of session\<0>
- ; 20 67 6E 69 74 69 61 57 00198
- ; 74 78 65 6E 20 72 6F 66 001A0
- ; 72 6F 20 65 6C 69 66 20 001A8
- ; 20 66 6F 20 64 6E 65 20 001B0
- ; 00 6E 6F 69 73 73 65 73 001B8
- P.AAX: .ASCII \ characters received for file \<0><0>
- ; 74 63 61 72 61 68 63 20 001C0
- ; 65 63 65 72 20 73 72 65 001C8
- ; 72 6F 66 20 64 65 76 69 001D0
- ; 00 00 20 65 6C 69 66 20 001D8
- P.AAY: .ASCII \ Session complete\<0><0><0> ; 6E 6F 69 73 73 65 53 20 001E0
- ; 74 65 6C 70 6D 6F 63 20 001E8
- ; 00 00 00 65 001F0
- P.AAZ: .ASCII \ Session aborted\<0><0><0><0> ; 6E 6F 69 73 73 65 53 20 001F4
- ; 64 65 74 72 6F 62 61 20 001FC
- ; 00 00 00 00 00204
- P.ABA: .ASCII \ Unknown state\<0><0> ; 6E 77 6F 6E 6B 6E 55 20 00208
- ; 00 00 65 74 61 74 73 20 00210
- P.ABB: .ASCII \, \<0><0> ; 00 00 20 2C 00218
- P.ABC: .ASCII \ NAKs received\<0><0> ; 65 72 20 73 4B 41 4E 20 0021C
- ; 00 00 64 65 76 69 65 63 00224
- P.ABD: .ASCII \, \<0><0> ; 00 00 20 2C 0022C
- P.ABE: .ASCII \ NAKs sent\<0><0> ; 65 73 20 73 4B 41 4E 20 00230
- ; 00 00 74 6E 00238
-
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;STS_OUTPUT
- U.33: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 6442 01FC 00000
- MOVAB G^TT_CHAR, R8 ;TT_CHAR, R8 58 00000000G 00 9E 00002
- MOVAB G^SMSG_NAKS, R7 ;SMSG_NAKS, R7 57 00000000G 00 9E 00009
- MOVAB G^RMSG_NAKS, R6 ;RMSG_NAKS, R6 56 00000000G 00 9E 00010
- MOVAB G^TT_NUMBER, R5 ;TT_NUMBER, R5 55 00000000G 00 9E 00017
- MOVAB G^U.51, R4 ;U.51, R4 54 00000000' 00 9E 0001E
- MOVAB G^TT_TEXT, R3 ;TT_TEXT, R3 53 00000000G 00 9E 00025
- MOVAB G^P.ABA, R2 ;P.ABA, R2 52 00000000' 00 9E 0002C
- MOVZBL #91, -(SP) ;#91, -(SP) 6481 7E 5B 8F 9A 00033
- CALLS #1, (R8) ;#1, TT_CHAR 68 01 FB 00037
- CASEL (R4), #1, #19 ;STATE, #1, #19 6483 01 64 CF 0003A
- ; 13 0003D
- 1$: .WORD 4$-1$,- ;4$-1$,- 0032 0032 0003E
- 4$-1$,- ;4$-1$,- 0051 0044 00042
- 7$-1$,- ;7$-1$,- 0066 0060 00046
- 8$-1$,- ;8$-1$,- 0071 006C 0004A
- 10$-1$,- ;10$-1$,- 0082 007D 0004E
- 11$-1$,- ;11$-1$,- 003E 0028 00052
- 12$-1$,- ;12$-1$,- 002C 0038 00056
- 13$-1$,- ;13$-1$,- 0028 002C 0005A
- 14$-1$,- ;14$-1$,- 0028 0028 0005E
- 15$-1$,- ;15$-1$,- 0028 0028 00062
- 2$-1$,- ;2$-1$,-
- 6$-1$,- ;6$-1$,-
- 5$-1$,- ;5$-1$,-
- 3$-1$,- ;3$-1$,-
- 3$-1$,- ;3$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$,- ;2$-1$,-
- 2$-1$ ;2$-1$
- 2$: PUSHL R2 ;R2 6537 52 DD 00066
- BRB 16$ ;16$ 59 11 00068
- 3$: PUSHAB -336(R2) ;P.AAO 6487 FEB0 C2 9F 0006A
- BRB 16$ ;16$ 53 11 0006E
- 4$: PUSHAB -316(R2) ;P.AAP 6491 FEC4 C2 9F 00070
- BRB 9$ ;9$ 1D 11 00074
- 5$: PUSHAB -284(R2) ;P.AAQ 6496 FEE4 C2 9F 00076
- BRB 16$ ;16$ 47 11 0007A
- 6$: PUSHAB -252(R2) ;P.AAR 6499 FF04 C2 9F 0007C
- BRB 16$ ;16$ 41 11 00080
- 7$: PUSHL 2040(R4) ;FILE_CHARS 6503 07F8 C4 DD 00082
- CALLS #1, (R5) ;#1, TT_NUMBER 65 01 FB 00086
- PUSHAB -212(R2) ;P.AAS 6504 FF2C C2 9F 00089
- BRB 9$ ;9$ 04 11 0008D
- 8$: PUSHAB -184(R2) ;P.AAT 6510 FF48 C2 9F 0008F
- 9$: CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 00093
- PUSHAB G^FILE_NAME ;FILE_NAME 6511 00000000G 00 9F 00096
- BRB 16$ ;16$ 25 11 0009C
- 10$: PUSHAB -168(R2) ;P.AAU 6515 FF58 C2 9F 0009E
- BRB 16$ ;16$ 1F 11 000A2
- 11$: PUSHAB -140(R2) ;P.AAV 6518 FF74 C2 9F 000A4
- BRB 16$ ;16$ 19 11 000A8
- 12$: PUSHAB -112(R2) ;P.AAW 6521 90 A2 9F 000AA
- BRB 16$ ;16$ 14 11 000AD
- 13$: PUSHL 2040(R4) ;FILE_CHARS 6525 07F8 C4 DD 000AF
- CALLS #1, (R5) ;#1, TT_NUMBER 65 01 FB 000B3
- PUSHAB -72(R2) ;P.AAX 6526 B8 A2 9F 000B6
- BRB 9$ ;9$ D8 11 000B9
- 14$: PUSHAB -40(R2) ;P.AAY 6531 D8 A2 9F 000BB
- BRB 16$ ;16$ 03 11 000BE
- 15$: PUSHAB -20(R2) ;P.AAZ 6534 EC A2 9F 000C0
- 16$: CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 000C3
- MOVL (R4), R0 ;STATE, R0 6540 50 64 D0 000C6
- BLEQ 17$ ;17$ 6543 19 15 000C9
- CMPL R0, #5 ;R0, #5 05 50 D1 000CB
- BGTR 17$ ;17$ 14 14 000CE
- TSTL (R6) ;RMSG_NAKS 6546 66 D5 000D0
- BLEQ 19$ ;19$ 2F 15 000D2
- PUSHAB 16(R2) ;P.ABB 6549 10 A2 9F 000D4
- CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 000D7
- PUSHL (R6) ;RMSG_NAKS 6550 66 DD 000DA
- CALLS #1, (R5) ;#1, TT_NUMBER 65 01 FB 000DC
- PUSHAB 20(R2) ;P.ABC 6551 14 A2 9F 000DF
- BRB 18$ ;18$ 1C 11 000E2
- 17$: CMPL R0, #6 ;R0, #6 6556 06 50 D1 000E4
- BLSS 19$ ;19$ 1A 19 000E7
- CMPL R0, #8 ;R0, #8 08 50 D1 000E9
- BGTR 19$ ;19$ 15 14 000EC
- TSTL (R7) ;SMSG_NAKS 6559 67 D5 000EE
- BLEQ 19$ ;19$ 11 15 000F0
- PUSHAB 36(R2) ;P.ABD 6562 24 A2 9F 000F2
- CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 000F5
- PUSHL (R7) ;SMSG_NAKS 6563 67 DD 000F8
- CALLS #1, (R5) ;#1, TT_NUMBER 65 01 FB 000FA
- PUSHAB 40(R2) ;P.ABE 6564 28 A2 9F 000FD
- 18$: CALLS #1, (R3) ;#1, TT_TEXT 63 01 FB 00100
- 19$: MOVZBL #93, -(SP) ;#93, -(SP) 6570 7E 5D 8F 9A 00103
- CALLS #1, (R8) ;#1, TT_CHAR 68 01 FB 00107
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6571 00000000G 00 00 FB 0010A
- RET ; 6572 04 00111
-
- ; Routine Size: 274 bytes, Routine Base: $CODE$ + 287A
-
-
- ; 6573 1 %SBTTL 'TYPE_CHAR - Type out a character'
- ; 6574 1 ROUTINE TYPE_CHAR (CHARACTER) =
- ; 6575 1
- ; 6576 1 !++
- ; 6577 1 ! FUNCTIONAL DESCRIPTION:
- ; 6578 1 !
- ; 6579 1 ! This routine is used as an alternate output routine for BFR_EMPTY.
- ; 6580 1 ! It will type the character on the terminal, and always return a
- ; 6581 1 ! true status.
- ; 6582 1 !
- ; 6583 1 ! CALLING SEQUENCE:
- ; 6584 1 !
- ; 6585 1 ! STATUS = TYPE_CHAR (.CHARACTER);
- ; 6586 1 !
- ; 6587 1 ! INPUT PARAMETERS:
- ; 6588 1 !
- ; 6589 1 ! CHARACTER - The character to type
- ; 6590 1 !
- ; 6591 1 ! IMPLICIT INPUTS:
- ; 6592 1 !
- ; 6593 1 ! None.
- ; 6594 1 !
- ; 6595 1 ! OUPTUT PARAMETERS:
- ; 6596 1 !
- ; 6597 1 ! None.
- ; 6598 1 !
- ; 6599 1 ! IMPLICIT OUTPUTS:
- ; 6600 1 !
- ; 6601 1 ! None.
- ; 6602 1 !
- ; 6603 1 ! COMPLETION CODES:
- ; 6604 1 !
- ; 6605 1 ! None.
- ; 6606 1 !
- ; 6607 1 ! SIDE EFFECTS:
- ; 6608 1 !
- ; 6609 1 ! None.
- ; 6610 1 !
- ; 6611 1 !--
- ; 6612 1
- ; 6613 2 BEGIN
- ; 6614 2 TT_CHAR (.CHARACTER); ! Type the character
- ; 6615 2 RETURN KER_NORMAL; ! And return OK
- ; 6616 1 END; ! End of TYPE_CHAR
-
-
-
-
-
- ;TYPE_CHAR
- U.31: .WORD ^M<> ;Save nothing 6574 0000 00000
- PUSHL 4(AP) ;CHARACTER 6614 04 AC DD 00002
- CALLS #1, G^TT_CHAR ;#1, TT_CHAR 00000000G 00 01 FB 00005
- MOVL #134316043, R0 ;#134316043, R0 6615 50 0801800B 8F D0 0000C
- RET ; 04 00013
-
- ; Routine Size: 20 bytes, Routine Base: $CODE$ + 298C
-
-
- ; 6617 1 %SBTTL 'Debugging -- DBG_SEND'
- ; 6618 1 ROUTINE DBG_SEND (ADDRESS, LENGTH) : NOVALUE =
- ; 6619 1
- ; 6620 1 !++
- ; 6621 1 ! FUNCTIONAL DESCRIPTION:
- ; 6622 1 !
- ; 6623 1 ! This routine will output the message that is going to be sent
- ; 6624 1 ! as part of the debugging information that is turned on in the
- ; 6625 1 ! SET DEBUG command.
- ; 6626 1 !
- ; 6627 1 ! CALLING SEQUENCE:
- ; 6628 1 !
- ; 6629 1 ! DBG_SEND(MSG_ADDRESS, MSG_LENGTH);
- ; 6630 1 !
- ; 6631 1 ! INPUT PARAMETERS:
- ; 6632 1 !
- ; 6633 1 ! MSG_ADDRESS - Address of the message that is going to be sent
- ; 6634 1 ! to the remote KERMIT. The bytes are CHR_SIZE.
- ; 6635 1 ! MSG_LENGTH - Length of the message.
- ; 6636 1 !
- ; 6637 1 ! IMPLICIT INPUTS:
- ; 6638 1 !
- ; 6639 1 ! None.
- ; 6640 1 !
- ; 6641 1 ! OUTPUT PARAMETERS:
- ; 6642 1 !
- ; 6643 1 ! None.
- ; 6644 1 !
- ; 6645 1 ! IMPLICIT OUTPUTS:
- ; 6646 1 !
- ; 6647 1 ! None.
- ; 6648 1 !
- ; 6649 1 ! COMPLETION CODES:
- ; 6650 1 !
- ; 6651 1 ! None.
- ; 6652 1 !
- ; 6653 1 ! SIDE EFFECTS:
- ; 6654 1 !
- ; 6655 1 ! None.
- ; 6656 1 !
- ; 6657 1 !--
- ; 6658 1
- ; 6659 2 BEGIN
- ; 6660 2
- ; 6661 2 BIND
- ; 6662 2 SEND_TEXT = UPLIT (%ASCIZ'Sending...');
- ; 6663 2
- ; 6664 2 IF .DEBUG_FLAG
- ; 6665 2 THEN
- ; 6666 3 BEGIN
- ; 6667 3
- ; 6668 3 LOCAL
- ; 6669 3 OLD_RTN;
- ; 6670 3
- ; 6671 3 OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
- ; 6672 3 TT_TEXT (SEND_TEXT);
- ; 6673 3 DBG_MESSAGE (.ADDRESS, .LENGTH);
- ; 6674 3 TT_SET_OUTPUT (.OLD_RTN);
- ; 6675 2 END;
- ; 6676 2
- ; 6677 1 END; ! End of DBG_SEND
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.ABF: .ASCII \Sending...\<0><0> ; 2E 67 6E 69 64 6E 65 53 0023C
- ; 00 00 2E 2E 00244
-
- U.102= P.ABF
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;DBG_SEND
- U.35: .WORD ^M<R2,R3> ;Save R2,R3 6618 000C 00000
- MOVAB G^TT_SET_OUTPUT, R3 ;TT_SET_OUTPUT, R3 53 00000000G 00 9E 00002
- BLBC G^DEBUG_FLAG, 1$ ;DEBUG_FLAG, 1$ 6664 29 00000000G 00 E9 00009
- PUSHAB G^DBG_DUMP ;DBG_DUMP 6671 00000000G 00 9F 00010
- CALLS #1, (R3) ;#1, TT_SET_OUTPUT 63 01 FB 00016
- MOVL R0, R2 ;R0, OLD_RTN 52 50 D0 00019
- PUSHAB G^U.102 ;U.102 6672 00000000' 00 9F 0001C
- CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 00022
- MOVQ 4(AP), -(SP) ;ADDRESS, -(SP) 6673 7E 04 AC 7D 00029
- CALLS #2, G^U.34 ;#2, U.34 00000000V 00 02 FB 0002D
- PUSHL R2 ;OLD_RTN 6674 52 DD 00034
- CALLS #1, (R3) ;#1, TT_SET_OUTPUT 63 01 FB 00036
- 1$: RET ; 6677 04 00039
-
- ; Routine Size: 58 bytes, Routine Base: $CODE$ + 29A0
-
-
- ; 6678 1 %SBTTL 'Debugging -- DBG_RECEIVE'
- ; 6679 1 ROUTINE DBG_RECEIVE (ADDRESS) : NOVALUE =
- ; 6680 1
- ; 6681 1 !++
- ; 6682 1 ! FUNCTIONAL DESCRIPTION:
- ; 6683 1 !
- ; 6684 1 ! This routine will output the message that was received from
- ; 6685 1 ! the remote KERMIT. This routine is called only if the DEBUG_FLAG
- ; 6686 1 ! is true.
- ; 6687 1 !
- ; 6688 1 ! CALLING SEQUENCE:
- ; 6689 1 !
- ; 6690 1 ! DBG_RECEIVE(MSG_ADDRESS);
- ; 6691 1 !
- ; 6692 1 ! INPUT PARAMETERS:
- ; 6693 1 !
- ; 6694 1 ! MSG_ADDRESS - Address of the message received by the remote KERMIT.
- ; 6695 1 !
- ; 6696 1 ! IMPLICIT INPUTS:
- ; 6697 1 !
- ; 6698 1 ! None.
- ; 6699 1 !
- ; 6700 1 ! OUTPUT PARAMETERS:
- ; 6701 1 !
- ; 6702 1 ! None.
- ; 6703 1 !
- ; 6704 1 ! IMPLICIT OUTPUTS:
- ; 6705 1 !
- ; 6706 1 ! None.
- ; 6707 1 !
- ; 6708 1 ! COMPLETION CODES:
- ; 6709 1 !
- ; 6710 1 ! None.
- ; 6711 1 !
- ; 6712 1 ! SIDE EFFECTS:
- ; 6713 1 !
- ; 6714 1 ! None.
- ; 6715 1 !
- ; 6716 1 !--
- ; 6717 1
- ; 6718 2 BEGIN
- ; 6719 2
- ; 6720 2 BIND
- ; 6721 2 RECEIVE_TEXT = UPLIT (%ASCIZ'Received...');
- ; 6722 2
- ; 6723 2 IF .DEBUG_FLAG
- ; 6724 2 THEN
- ; 6725 3 BEGIN
- ; 6726 3
- ; 6727 3 LOCAL
- ; 6728 3 OLD_RTN;
- ; 6729 3
- ; 6730 3 OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
- ; 6731 3 TT_TEXT (RECEIVE_TEXT);
- ; 6732 3 DBG_MESSAGE (.ADDRESS, .REC_LENGTH);
- ; 6733 3 TT_SET_OUTPUT (.OLD_RTN);
- ; 6734 2 END;
- ; 6735 2
- ; 6736 1 END; ! End of DBG_RECEIVE
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.ABG: .ASCII \Received...\<0> ; 64 65 76 69 65 63 65 52 00248
- ; 00 2E 2E 2E 00250
-
- U.103= P.ABG
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;DBG_RECEIVE
- U.36: .WORD ^M<R2,R3> ;Save R2,R3 6679 000C 00000
- MOVAB G^TT_SET_OUTPUT, R3 ;TT_SET_OUTPUT, R3 53 00000000G 00 9E 00002
- BLBC G^DEBUG_FLAG, 1$ ;DEBUG_FLAG, 1$ 6723 2E 00000000G 00 E9 00009
- PUSHAB G^DBG_DUMP ;DBG_DUMP 6730 00000000G 00 9F 00010
- CALLS #1, (R3) ;#1, TT_SET_OUTPUT 63 01 FB 00016
- MOVL R0, R2 ;R0, OLD_RTN 52 50 D0 00019
- PUSHAB G^U.103 ;U.103 6731 00000000' 00 9F 0001C
- CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 00022
- PUSHL G^U.57 ;U.57 6732 00000000' 00 DD 00029
- PUSHL 4(AP) ;ADDRESS 04 AC DD 0002F
- CALLS #2, G^U.34 ;#2, U.34 00000000V 00 02 FB 00032
- PUSHL R2 ;OLD_RTN 6733 52 DD 00039
- CALLS #1, (R3) ;#1, TT_SET_OUTPUT 63 01 FB 0003B
- 1$: RET ; 6736 04 0003E
-
- ; Routine Size: 63 bytes, Routine Base: $CODE$ + 29DA
-
-
- ; 6737 1 %SBTTL 'Debugging -- DBG_MESSAGE'
- ; 6738 1 ROUTINE DBG_MESSAGE (MSG_ADDRESS, MSG_LENGTH) : NOVALUE =
- ; 6739 1
- ; 6740 1 !++
- ; 6741 1 ! FUNCTIONAL DESCRIPTION:
- ; 6742 1 !
- ; 6743 1 ! This routine will display a message that is either being sent
- ; 6744 1 ! or received on the user's terminal.
- ; 6745 1 !
- ; 6746 1 ! CALLING SEQUENCE:
- ; 6747 1 !
- ; 6748 1 ! DBG_MESSAGE(MSG_ADDRESS, MSG_LENGTH);
- ; 6749 1 !
- ; 6750 1 ! INPUT PARAMETERS:
- ; 6751 1 !
- ; 6752 1 ! MSG_ADDRESS - Address of the message to be output
- ; 6753 1 ! MSG_LENGTH - Length of the message to be output.
- ; 6754 1 !
- ; 6755 1 ! IMPLICIT INPUTS:
- ; 6756 1 !
- ; 6757 1 ! None.
- ; 6758 1 !
- ; 6759 1 ! OUTPUT PARAMETERS:
- ; 6760 1 !
- ; 6761 1 ! None.
- ; 6762 1 !
- ; 6763 1 ! IMPLICIT OUTPUTS:
- ; 6764 1 !
- ; 6765 1 ! None.
- ; 6766 1 !
- ; 6767 1 ! COMPLETION CODES:
- ; 6768 1 !
- ; 6769 1 ! None.
- ; 6770 1 !
- ; 6771 1 ! SIDE EFFECTS:
- ; 6772 1 !
- ; 6773 1 ! None.
- ; 6774 1 !
- ; 6775 1 !--
- ; 6776 1
- ; 6777 2 BEGIN
- ; 6778 2
- ; 6779 2 MAP
- ; 6780 2 MSG_ADDRESS : REF VECTOR [CH$ALLOCATION (MAX_MSG, CHR_SIZE)]; ! Point to the vector
- ; 6781 2
- ; 6782 2 LOCAL
- ; 6783 2 OLD_RTN, ! Old type out routine
- ; 6784 2 CHKSUM, ! Numeric value of block check
- ; 6785 2 TEMP_POINTER, ! Temporary character pointer
- ; 6786 2 MSG_MSG, ! [108] ! Starting point for data
- ; 6787 2 MSG_LEN;
- ; 6788 2
- ; 6789 2 !
- ; 6790 2 ! Message type text
- ; 6791 2 !
- ; 6792 2
- ; 6793 2 BIND
- ; 6794 2 DATA_TEXT = UPLIT (%ASCIZ' (Data)'),
- ; 6795 2 ACK_TEXT = UPLIT (%ASCIZ' (ACK)'),
- ; 6796 2 NAK_TEXT = UPLIT (%ASCIZ' (NAK)'),
- ; 6797 2 SND_INIT_TEXT = UPLIT (%ASCIZ' (Send init)'),
- ; 6798 2 BREAK_TEXT = UPLIT (%ASCIZ' (Break)'),
- ; 6799 2 TEXT_TEXT = UPLIT (%ASCIZ' (Text header)'),
- ; 6800 2 FILE_TEXT = UPLIT (%ASCIZ' (File header)'),
- ; 6801 2 EOF_TEXT = UPLIT (%ASCIZ' (EOF)'),
- ; 6802 2 ERROR_TEXT = UPLIT (%ASCIZ' (Error)'),
- ; 6803 2 RCV_INIT_TEXT = UPLIT (%ASCIZ' (Receive initiate)'),
- ; 6804 2 COMMAND_TEXT = UPLIT (%ASCIZ' (Command)'),
- ; 6805 2 KERMIT_TEXT = UPLIT (%ASCIZ' (Generic KERMIT command)');
- ; 6806 2
- ; 6807 2 !
- ; 6808 2 ! Header information
- ; 6809 2 !
- ; 6810 2
- ; 6811 2 BIND
- ; 6812 2 MN_TEXT = UPLIT (%ASCIZ'Message number: '),
- ; 6813 2 LENGTH_TEXT = UPLIT (%ASCIZ' Length: '),
- ; 6814 2 DEC_TEXT = UPLIT (%ASCIZ' (dec)'),
- ; 6815 2 MSG_TYP_TEXT = UPLIT (%ASCIZ'Message type: '),
- ; 6816 2 CHKSUM_TEXT = UPLIT (%ASCIZ'Checksum: '),
- ; 6817 2 CHKSUM_NUM_TEXT = UPLIT (%ASCIZ' = '),
- ; 6818 2 OPT_DATA_TEXT = UPLIT (%ASCIZ'Optional data: '),
- ; 6819 2 PRE_CHAR_TEXT = UPLIT (%ASCIZ' "');
- ; 6820 2
- ; 6821 2 !
- ; 6822 2 ! Ensure that the type out will go to the debugging location
- ; 6823 2 !
- ; 6824 2 OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
- ; 6825 2 !
- ; 6826 2 ! Preliminary calculations
- ; 6827 2 !
- ; 6828 2 MSG_LEN = UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_COUNT, CHR_SIZE)));
- ; 6829 2 MSG_MSG = PKT_MSG; ! [108]
- ; 6830 2 IF .MSG_LEN EQL 0 ! [108]
- ; 6831 2 THEN ! [108]
- ; 6832 3 BEGIN ! [108]
- ; 6833 3 MSG_LEN = UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_COUNTX1, CHR_SIZE))) * 95
- ; 6834 3 +
- ; 6835 3 UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_COUNTX2, CHR_SIZE))) +
- ; 6836 3 PKT_HCHECK - 1; ! [108]
- ; 6837 3 MSG_MSG = PKT_MSGX; ! [108]
- ; 6838 2 END; ! [108]
- ; 6839 2
- ; 6840 2 !
- ; 6841 2 ! First output some header information for the packet.
- ; 6842 2 !
- ; 6843 2 TT_CRLF ();
- ; 6844 2 TT_TEXT (MN_TEXT);
- ; 6845 2 TT_NUMBER (UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_SEQ, CHR_SIZE))));
- ; 6846 2 TT_TEXT (DEC_TEXT);
- ; 6847 2 TT_TEXT (LENGTH_TEXT);
- ; 6848 2 TT_NUMBER (.MSG_LEN);
- ; 6849 2 TT_TEXT (DEC_TEXT);
- ; 6850 2 TT_CRLF ();
- ; 6851 2 !
- ; 6852 2 ! Now output the message type and dependent information
- ; 6853 2 !
- ; 6854 2 TT_TEXT (MSG_TYP_TEXT);
- ; 6855 2 TT_CHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_TYPE, CHR_SIZE)));
- ; 6856 2
- ; 6857 2 SELECTONE CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_TYPE, CHR_SIZE)) OF
- ; 6858 2 SET
- ; 6859 2
- ; 6860 2 [MSG_DATA] :
- ; 6861 2 TT_TEXT (DATA_TEXT);
- ; 6862 2
- ; 6863 2 [MSG_ACK] :
- ; 6864 2 TT_TEXT (ACK_TEXT);
- ; 6865 2
- ; 6866 2 [MSG_NAK] :
- ; 6867 2 TT_TEXT (NAK_TEXT);
- ; 6868 2
- ; 6869 2 [MSG_SND_INIT] :
- ; 6870 2 TT_TEXT (SND_INIT_TEXT);
- ; 6871 2
- ; 6872 2 [MSG_BREAK] :
- ; 6873 2 TT_TEXT (BREAK_TEXT);
- ; 6874 2
- ; 6875 2 [MSG_FILE] :
- ; 6876 2 TT_TEXT (FILE_TEXT);
- ; 6877 2
- ; 6878 2 [MSG_TEXT] :
- ; 6879 2 TT_TEXT (TEXT_TEXT);
- ; 6880 2
- ; 6881 2 [MSG_EOF] :
- ; 6882 2 TT_TEXT (EOF_TEXT);
- ; 6883 2
- ; 6884 2 [MSG_ERROR] :
- ; 6885 2 TT_TEXT (ERROR_TEXT);
- ; 6886 2
- ; 6887 2 [MSG_GENERIC] :
- ; 6888 2 TT_TEXT (KERMIT_TEXT);
- ; 6889 2
- ; 6890 2 [MSG_COMMAND] :
- ; 6891 2 TT_TEXT (COMMAND_TEXT);
- ; 6892 2 TES;
- ; 6893 2
- ; 6894 2 TT_CRLF ();
- ; 6895 2 !
- ; 6896 2 ! Now output any of the optional data.
- ; 6897 2 !
- ; 6898 2
- ; 6899 2 IF .MSG_LEN - .MSG_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR) NEQ 0 ! [108]
- ; 6900 2 THEN
- ; 6901 3 BEGIN
- ; 6902 3 TT_TEXT (OPT_DATA_TEXT);
- ; 6903 3 TT_CRLF ();
- ; 6904 3 TEMP_POINTER = CH$PTR (.MSG_ADDRESS, .MSG_MSG, CHR_SIZE); ! [108]
- ; 6905 3
- ; 6906 3 INCR I FROM 1 TO .MSG_LEN - .MSG_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR) DO ! [108]
- ; 6907 4 BEGIN
- ; 6908 4
- ; 6909 4 IF (.I MOD 10) EQL 1
- ; 6910 4 THEN
- ; 6911 5 BEGIN
- ; 6912 5 TT_CRLF ();
- ; 6913 5 TT_CHAR (CHR_TAB);
- ; 6914 4 END;
- ; 6915 4
- ; 6916 4 TT_TEXT (PRE_CHAR_TEXT);
- ; 6917 4 TT_CHAR (CH$RCHAR_A (TEMP_POINTER));
- ; 6918 4 TT_CHAR (%C'"');
- ; 6919 3 END;
- ; 6920 3
- ; 6921 3 IF ((.MSG_LEN - .MSG_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR)) MOD 10) EQL 1 THEN
- ; 6922 3 TT_CRLF (); ! [108]
- ; 6923 3
- ; 6924 3 TT_CRLF ();
- ; 6925 2 END;
- ; 6926 2
- ; 6927 2 !
- ; 6928 2 ! Now output the checksum for the message that we received
- ; 6929 2 !
- ; 6930 2 ! This could be either 1 two or three characters.
- ; 6931 2 TT_TEXT (CHKSUM_TEXT);
- ; 6932 2 TEMP_POINTER = CH$PTR (.MSG_ADDRESS,
- ; 6933 2 .MSG_LEN + PKT_CHKSUM + 1 - (.BLK_CHK_TYPE - CHK_1CHAR), CHR_SIZE); ! [108]
- ; 6934 2
- ; 6935 2 CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
- ; 6936 2 SET
- ; 6937 2
- ; 6938 2 [CHK_1CHAR] :
- ; 6939 3 BEGIN
- ; 6940 3 TT_TEXT (PRE_CHAR_TEXT);
- ; 6941 3 TT_CHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6942 3 TT_CHAR (%C'"');
- ; 6943 3 CHKSUM = UNCHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6944 2 END;
- ; 6945 2
- ; 6946 2 [CHK_2CHAR] :
- ; 6947 3 BEGIN
- ; 6948 3 CHKSUM = 0;
- ; 6949 3 TT_TEXT (PRE_CHAR_TEXT);
- ; 6950 3 TT_CHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6951 3 TT_CHAR (%C'"');
- ; 6952 3 CHKSUM<6, 6> = UNCHAR (CH$RCHAR_A (TEMP_POINTER));
- ; 6953 3 TT_TEXT (PRE_CHAR_TEXT);
- ; 6954 3 TT_CHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6955 3 TT_CHAR (%C'"');
- ; 6956 3 CHKSUM<0, 6> = UNCHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6957 2 END;
- ; 6958 2
- ; 6959 2 [CHK_CRC] :
- ; 6960 3 BEGIN
- ; 6961 3 CHKSUM = 0;
- ; 6962 3 TT_TEXT (PRE_CHAR_TEXT);
- ; 6963 3 TT_CHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6964 3 TT_CHAR (%C'"');
- ; 6965 3 CHKSUM<12, 4> = UNCHAR (CH$RCHAR_A (TEMP_POINTER));
- ; 6966 3 TT_TEXT (PRE_CHAR_TEXT);
- ; 6967 3 TT_CHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6968 3 TT_CHAR (%C'"');
- ; 6969 3 CHKSUM<6, 6> = UNCHAR (CH$RCHAR_A (TEMP_POINTER));
- ; 6970 3 TT_TEXT (PRE_CHAR_TEXT);
- ; 6971 3 TT_CHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6972 3 TT_CHAR (%C'"');
- ; 6973 3 CHKSUM<0, 6> = UNCHAR (CH$RCHAR (.TEMP_POINTER));
- ; 6974 2 END;
- ; 6975 2 TES;
- ; 6976 2
- ; 6977 2 TT_TEXT (CHKSUM_NUM_TEXT);
- ; 6978 2 TT_NUMBER (.CHKSUM);
- ; 6979 2 TT_TEXT (DEC_TEXT);
- ; 6980 2 TT_CRLF ();
- ; 6981 2 TT_SET_OUTPUT (.OLD_RTN); ! Reset output destination
- ; 6982 1 END; ! End of DBG_MESSAGE
-
-
-
- .PSECT $PLIT$,NOWRT,NOEXE,2
-
- P.ABH: .ASCII \ (Data)\<0> ; 00 29 61 74 61 44 28 20 00254
- P.ABI: .ASCII \ (ACK)\<0><0> ; 00 00 29 4B 43 41 28 20 0025C
- P.ABJ: .ASCII \ (NAK)\<0><0> ; 00 00 29 4B 41 4E 28 20 00264
- P.ABK: .ASCII \ (Send init)\<0><0><0><0> ; 69 20 64 6E 65 53 28 20 0026C
- ; 00 00 00 00 29 74 69 6E 00274
- P.ABL: .ASCII \ (Break)\<0><0><0><0> ; 29 6B 61 65 72 42 28 20 0027C
- ; 00 00 00 00 00284
- P.ABM: .ASCII \ (Text header)\<0><0> ; 68 20 74 78 65 54 28 20 00288
- ; 00 00 29 72 65 64 61 65 00290
- P.ABN: .ASCII \ (File header)\<0><0> ; 68 20 65 6C 69 46 28 20 00298
- ; 00 00 29 72 65 64 61 65 002A0
- P.ABO: .ASCII \ (EOF)\<0><0> ; 00 00 29 46 4F 45 28 20 002A8
- P.ABP: .ASCII \ (Error)\<0><0><0><0> ; 29 72 6F 72 72 45 28 20 002B0
- ; 00 00 00 00 002B8
- P.ABQ: .ASCII \ (Receive initiate)\<0> ; 76 69 65 63 65 52 28 20 002BC
- ; 61 69 74 69 6E 69 20 65 002C4
- ; 00 29 65 74 002CC
- P.ABR: .ASCII \ (Command)\<0><0> ; 6E 61 6D 6D 6F 43 28 20 002D0
- ; 00 00 29 64 002D8
- P.ABS: .ASCII \ (Generic KERMIT command)\<0><0><0>
- ; 69 72 65 6E 65 47 28 20 002DC
- ; 54 49 4D 52 45 4B 20 63 002E4
- ; 64 6E 61 6D 6D 6F 63 20 002EC
- ; 00 00 00 29 002F4
- P.ABT: .ASCII \Message number: \<0><0><0><0> ; 20 65 67 61 73 73 65 4D 002F8
- ; 20 3A 72 65 62 6D 75 6E 00300
- ; 00 00 00 00 00308
- P.ABU: .ASCII <9>\Length: \<0><0><0> ; 3A 68 74 67 6E 65 4C 09 0030C
- ; 00 00 00 20 00314
- P.ABV: .ASCII \ (dec)\<0><0> ; 00 00 29 63 65 64 28 20 00318
- P.ABW: .ASCII \Message type: \<0><0> ; 20 65 67 61 73 73 65 4D 00320
- ; 00 00 20 3A 65 70 79 74 00328
- P.ABX: .ASCII \Checksum: \<0><0> ; 6D 75 73 6B 63 65 68 43 00330
- ; 00 00 20 3A 00338
- P.ABY: .ASCII \ = \<0> ; 00 20 3D 20 0033C
- P.ABZ: .ASCII \Optional data: \<0> ; 6C 61 6E 6F 69 74 70 4F 00340
- ; 00 20 3A 61 74 61 64 20 00348
- P.ACA: .ASCII \ "\<0><0> ; 00 00 22 20 00350
-
- U.105= P.ABH
- U.106= P.ABI
- U.107= P.ABJ
- U.108= P.ABK
- U.109= P.ABL
- U.110= P.ABM
- U.111= P.ABN
- U.112= P.ABO
- U.113= P.ABP
- U.114= P.ABQ
- U.115= P.ABR
- U.116= P.ABS
- U.117= P.ABT
- U.118= P.ABU
- U.119= P.ABV
- U.120= P.ABW
- U.121= P.ABX
- U.122= P.ABY
- U.123= P.ABZ
- U.124= P.ACA
-
-
- .PSECT $CODE$,NOWRT,2
-
- ;DBG_MESSAGE
- U.34: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,- 6738 0FFC 00000
- R11> ;R11
- MOVAB G^TT_CHAR, R11 ;TT_CHAR, R11 5B 00000000G 00 9E 00002
- MOVAB G^TT_TEXT, R10 ;TT_TEXT, R10 5A 00000000G 00 9E 00009
- MOVAB G^U.124, R9 ;U.124, R9 59 00000000' 00 9E 00010
- PUSHAB G^DBG_DUMP ;DBG_DUMP 6824 00000000G 00 9F 00017
- CALLS #1, G^TT_SET_OUTPUT ;#1, TT_SET_OUTPUT 00000000G 00 01 FB 0001D
- MOVL R0, R8 ;R0, OLD_RTN 58 50 D0 00024
- MOVL 4(AP), R4 ;MSG_ADDRESS, R4 6828 54 04 AC D0 00027
- MOVZBL 1(R4), R2 ;1(R4), MSG_LEN 52 01 A4 9A 0002B
- SUBL2 #32, R2 ;#32, MSG_LEN 52 20 C2 0002F
- MOVL #4, R5 ;#4, MSG_MSG 6829 55 04 D0 00032
- TSTL R2 ;MSG_LEN 6830 52 D5 00035
- BNEQ 1$ ;1$ 18 12 00037
- MOVZBL 4(R4), R0 ;4(R4), R0 6833 50 04 A4 9A 00039
- MULL2 #95, R0 ;#95, R0 50 0000005F 8F C4 0003D
- MOVZBL 5(R4), R1 ;5(R4), R1 6835 51 05 A4 9A 00044
- MOVAB -3067(R1)[R0], R2 ;-3067(R1)[R0], MSG_LEN 6836 52 F405 C140 9E 00048
- MOVL #7, R5 ;#7, MSG_MSG 6837 55 07 D0 0004E
- 1$: CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6843 00000000G 00 00 FB 00051
- PUSHAB -88(R9) ;MN_TEXT 6844 A8 A9 9F 00058
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 0005B
- MOVZBL 2(R4), -(SP) ;2(R4), -(SP) 6845 7E 02 A4 9A 0005E
- SUBL2 #32, (SP) ;#32, (SP) 6E 20 C2 00062
- CALLS #1, G^TT_NUMBER ;#1, TT_NUMBER 00000000G 00 01 FB 00065
- PUSHAB -56(R9) ;DEC_TEXT 6846 C8 A9 9F 0006C
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 0006F
- PUSHAB -68(R9) ;LENGTH_TEXT 6847 BC A9 9F 00072
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 00075
- PUSHL R2 ;MSG_LEN 6848 52 DD 00078
- CALLS #1, G^TT_NUMBER ;#1, TT_NUMBER 00000000G 00 01 FB 0007A
- PUSHAB -56(R9) ;DEC_TEXT 6849 C8 A9 9F 00081
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 00084
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6850 00000000G 00 00 FB 00087
- PUSHAB -48(R9) ;MSG_TYP_TEXT 6854 D0 A9 9F 0008E
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 00091
- MOVZBL 3(R4), R3 ;3(R4), R3 6855 53 03 A4 9A 00094
- PUSHL R3 ;R3 53 DD 00098
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 0009A
- CMPB R3, #68 ;R3, #68 6860 44 8F 53 91 0009D
- BNEQ 2$ ;2$ 06 12 000A1
- PUSHAB -252(R9) ;DATA_TEXT 6861 FF04 C9 9F 000A3
- BRB 12$ ;12$ 74 11 000A7
- 2$: CMPB R3, #89 ;R3, #89 6863 59 8F 53 91 000A9
- BNEQ 3$ ;3$ 06 12 000AD
- PUSHAB -244(R9) ;ACK_TEXT 6864 FF0C C9 9F 000AF
- BRB 12$ ;12$ 68 11 000B3
- 3$: CMPB R3, #78 ;R3, #78 6866 4E 8F 53 91 000B5
- BNEQ 4$ ;4$ 06 12 000B9
- PUSHAB -236(R9) ;NAK_TEXT 6867 FF14 C9 9F 000BB
- BRB 12$ ;12$ 5C 11 000BF
- 4$: CMPB R3, #83 ;R3, #83 6869 53 8F 53 91 000C1
- BNEQ 5$ ;5$ 06 12 000C5
- PUSHAB -228(R9) ;SND_INIT_TEXT 6870 FF1C C9 9F 000C7
- BRB 12$ ;12$ 50 11 000CB
- 5$: CMPB R3, #66 ;R3, #66 6872 42 8F 53 91 000CD
- BNEQ 6$ ;6$ 06 12 000D1
- PUSHAB -212(R9) ;BREAK_TEXT 6873 FF2C C9 9F 000D3
- BRB 12$ ;12$ 44 11 000D7
- 6$: CMPB R3, #70 ;R3, #70 6875 46 8F 53 91 000D9
- BNEQ 7$ ;7$ 06 12 000DD
- PUSHAB -184(R9) ;FILE_TEXT 6876 FF48 C9 9F 000DF
- BRB 12$ ;12$ 38 11 000E3
- 7$: CMPB R3, #88 ;R3, #88 6878 58 8F 53 91 000E5
- BNEQ 8$ ;8$ 06 12 000E9
- PUSHAB -200(R9) ;TEXT_TEXT 6879 FF38 C9 9F 000EB
- BRB 12$ ;12$ 2C 11 000EF
- 8$: CMPB R3, #90 ;R3, #90 6881 5A 8F 53 91 000F1
- BNEQ 9$ ;9$ 06 12 000F5
- PUSHAB -168(R9) ;EOF_TEXT 6882 FF58 C9 9F 000F7
- BRB 12$ ;12$ 20 11 000FB
- 9$: CMPB R3, #69 ;R3, #69 6884 45 8F 53 91 000FD
- BNEQ 10$ ;10$ 06 12 00101
- PUSHAB -160(R9) ;ERROR_TEXT 6885 FF60 C9 9F 00103
- BRB 12$ ;12$ 14 11 00107
- 10$: CMPB R3, #71 ;R3, #71 6887 47 8F 53 91 00109
- BNEQ 11$ ;11$ 05 12 0010D
- PUSHAB -116(R9) ;KERMIT_TEXT 6888 8C A9 9F 0010F
- BRB 12$ ;12$ 09 11 00112
- 11$: CMPB R3, #67 ;R3, #67 6890 43 8F 53 91 00114
- BNEQ 13$ ;13$ 06 12 00118
- PUSHAB -128(R9) ;COMMAND_TEXT 6891 80 A9 9F 0011A
- 12$: CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 0011D
- 13$: CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6894 00000000G 00 00 FB 00120
- SUBL3 R5, R2, R0 ;MSG_MSG, MSG_LEN, R0 6899 52 55 C3 00127
- ; 50 0012A
- MOVAB 1(R0), R6 ;1(R0), R6 56 01 A0 9E 0012B
- SUBL3 #49, G^U.48, R0 ;#49, U.48, R0 00000000' 00 31 C3 0012F
- ; 50 00136
- CMPL R6, R0 ;R6, R0 50 56 D1 00137
- BEQL 18$ ;18$ 75 13 0013A
- PUSHAB -16(R9) ;OPT_DATA_TEXT 6902 F0 A9 9F 0013C
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 0013F
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6903 00000000G 00 00 FB 00142
- ADDL3 R5, R4, R3 ;MSG_MSG, R4, TEMP_POINTER 6904 54 55 C1 00149
- ; 53 0014C
- SUBL3 G^U.48, R6, R0 ;U.48, R6, R0 6906 56 00000000' 00 C3 0014D
- ; 50 00154
- MOVAB 49(R0), R7 ;49(R0), R7 57 31 A0 9E 00155
- CLRL R5 ;I 55 D4 00159
- BRB 16$ ;16$ 2B 11 0015B
- 14$: EMUL #1, R5, #0, -(SP) ;#1, I, #0, -(SP) 6909 55 01 7A 0015D
- ; 7E 00 00160
- EDIV #10, (SP)+, R0, R0 ;#10, (SP)+, R0, R0 8E 0A 7B 00162
- ; 50 50 00165
- CMPL R0, #1 ;R0, #1 01 50 D1 00167
- BNEQ 15$ ;15$ 0C 12 0016A
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6912 00000000G 00 00 FB 0016C
- PUSHL #9 ;#9 6913 09 DD 00173
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 00175
- 15$: PUSHL R9 ;R9 6916 59 DD 00178
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 0017A
- MOVZBL (R3)+, -(SP) ;(TEMP_POINTER)+, -(SP) 6917 7E 83 9A 0017D
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 00180
- PUSHL #34 ;#34 6918 22 DD 00183
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 00185
- 16$: AOBLEQ R7, R5, 14$ ;R7, I, 14$ 55 57 F3 00188
- ; D1 0018B
- SUBL3 G^U.48, R6, R0 ;U.48, R6, R0 6921 56 00000000' 00 C3 0018C
- ; 50 00193
- EMUL #1, R0, #49, -(SP) ;#1, R0, #49, -(SP) 50 01 7A 00194
- ; 7E 31 00197
- EDIV #10, (SP)+, R0, R0 ;#10, (SP)+, R0, R0 8E 0A 7B 00199
- ; 50 50 0019C
- CMPL R0, #1 ;R0, #1 01 50 D1 0019E
- BNEQ 17$ ;17$ 07 12 001A1
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6922 00000000G 00 00 FB 001A3
- 17$: CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6924 00000000G 00 00 FB 001AA
- 18$: PUSHAB -32(R9) ;CHKSUM_TEXT 6931 E0 A9 9F 001B1
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 001B4
- MOVL G^U.48, R0 ;U.48, R0 6933 50 00000000' 00 D0 001B7
- SUBL2 R0, R2 ;R0, R2 52 50 C2 001BE
- MOVAB 50(R2)[R4], R3 ;50(R2)[R4], TEMP_POINTER 53 32 A244 9E 001C1
- CASEL R0, #49, #2 ;R0, #49, #2 6935 31 50 CF 001C6
- ; 02 001C9
- 19$: .WORD 20$-19$,- ;20$-19$,- 001E 0006 001CA
- 21$-19$,- ;21$-19$,- 0022 001CE
- 22$-19$ ;22$-19$
- 20$: PUSHL R9 ;R9 6940 59 DD 001D0
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 001D2
- MOVZBL (R3), -(SP) ;(TEMP_POINTER), -(SP) 6941 7E 63 9A 001D5
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 001D8
- PUSHL #34 ;#34 6942 22 DD 001DB
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 001DD
- MOVZBL (R3), R2 ;(TEMP_POINTER), CHKSUM 6943 52 63 9A 001E0
- SUBL2 #32, R2 ;#32, CHKSUM 52 20 C2 001E3
- BRB 24$ ;24$ 59 11 001E6
- 21$: CLRL R2 ;CHKSUM 6948 52 D4 001E8
- BRB 23$ ;23$ 6949 1E 11 001EA
- 22$: CLRL R2 ;CHKSUM 6961 52 D4 001EC
- PUSHL R9 ;R9 6962 59 DD 001EE
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 001F0
- MOVZBL (R3), -(SP) ;(TEMP_POINTER), -(SP) 6963 7E 63 9A 001F3
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 001F6
- PUSHL #34 ;#34 6964 22 DD 001F9
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 001FB
- MOVZBL (R3)+, R0 ;(TEMP_POINTER)+, R0 6965 50 83 9A 001FE
- MOVAB -32(R0), R1 ;-32(R0), R1 51 E0 A0 9E 00201
- INSV R1, #12, #4, R2 ;R1, #12, #4, CHKSUM 0C 51 F0 00205
- ; 52 04 00208
- 23$: PUSHL R9 ;R9 6966 59 DD 0020A
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 0020C
- MOVZBL (R3), -(SP) ;(TEMP_POINTER), -(SP) 6967 7E 63 9A 0020F
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 00212
- PUSHL #34 ;#34 6968 22 DD 00215
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 00217
- MOVZBL (R3)+, R0 ;(TEMP_POINTER)+, R0 6969 50 83 9A 0021A
- MOVAB -32(R0), R1 ;-32(R0), R1 51 E0 A0 9E 0021D
- INSV R1, #6, #6, R2 ;R1, #6, #6, CHKSUM 06 51 F0 00221
- ; 52 06 00224
- PUSHL R9 ;R9 6970 59 DD 00226
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 00228
- MOVZBL (R3), -(SP) ;(TEMP_POINTER), -(SP) 6971 7E 63 9A 0022B
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 0022E
- PUSHL #34 ;#34 6972 22 DD 00231
- CALLS #1, (R11) ;#1, TT_CHAR 6B 01 FB 00233
- MOVZBL (R3), R0 ;(TEMP_POINTER), R0 6973 50 63 9A 00236
- SUBL2 #32, R0 ;#32, R0 50 20 C2 00239
- INSV R0, #0, #6, R2 ;R0, #0, #6, CHKSUM 00 50 F0 0023C
- ; 52 06 0023F
- 24$: PUSHAB -20(R9) ;CHKSUM_NUM_TEXT 6977 EC A9 9F 00241
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 00244
- PUSHL R2 ;CHKSUM 6978 52 DD 00247
- CALLS #1, G^TT_NUMBER ;#1, TT_NUMBER 00000000G 00 01 FB 00249
- PUSHAB -56(R9) ;DEC_TEXT 6979 C8 A9 9F 00250
- CALLS #1, (R10) ;#1, TT_TEXT 6A 01 FB 00253
- CALLS #0, G^TT_CRLF ;#0, TT_CRLF 6980 00000000G 00 00 FB 00256
- PUSHL R8 ;OLD_RTN 6981 58 DD 0025D
- CALLS #1, G^TT_SET_OUTPUT ;#1, TT_SET_OUTPUT 00000000G 00 01 FB 0025F
- RET ; 6982 04 00266
-
- ; Routine Size: 615 bytes, Routine Base: $CODE$ + 2A19
-
-
- ; 6983 1 %SBTTL 'End of KERMSG'
- ; 6984 1 END
- ; 6985 1
- ; 6986 0 ELUDOM
-
-
-
-
-
-
- ; PSECT SUMMARY
- ;
- ; Name Bytes Attributes
- ;
- ; $OWN$ 2216 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; $GLOBAL$ 4 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; $CODE$ 11392 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; . ABS . 0 NOVEC,NOWRT,NORD ,NOEXE,NOSHR, LCL, ABS, CON,NOPIC,ALIGN(0)
- ; $PLIT$ 852 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
-
-
-
-
- ; Library Statistics
- ;
- ; -------- Symbols -------- Pages Processing
- ; File Total Loaded Percent Mapped Time
- ;
- ; SYS$COMMON:[SYSLIB]STARLET.L32;2 12540 4 0 721 00:00.3
-
-
-
-
-
-
-
- ; COMMAND QUALIFIERS
-
- ; BLI VMSMSG/LIS/SOURCE:NOHEAD/MACH=(ASSEM,UNIQUE)
-
- ; Compilation Complete
-
- .END
-